java官方文檔有說明: An identifier cannot have the same spelling (Unicode character sequence) as a keyword , boolean literal , or the null literal, or a compile-time error occurs. While true and false might appear to be keywords, they are technically boolean literals . Similarly, while null might appear to be a keyword, it is technically the null literal . {標識符不能具有與關鍵字、布爾文字或null文字相同的拼寫(Unicode字符序列)或編譯時錯誤。雖然真和假可能是關鍵字,但它們在技術上是布爾文字。類似地,雖然null可能看起來是一個關鍵字,但它在技術上是null字面值。}
true、false、null不屬於關鍵字,但是屬於標識符規定的關鍵字,官方意義上關鍵字只有51個幷包含兩個保留字, 但是這3個都屬於標識符規定的,所以它們之間的關係是:標識符包含的關鍵字-->boolean literal(true,false)、 null literal;
-
1,java的關鍵字(keyword)有多少個?
54個關鍵字+2個保留字=56個關鍵字(java的關鍵字都是小寫的!!嚴格的說是52個關鍵字或51個關鍵字,分具體的場景)
-
2,java的保留字(reserve word)有多少個?問題:分別是什麼?
2個保留字:Java語言的的保留字是指預留的關鍵字
1).const 有道釋義:n. 常量,常數
用於修改字段或局部變量的聲明。它指定字段或局部變量的值是常數,不能被修改
2).goto 有道釋義:vi. 轉到
指定跳轉到標籤,找到標籤後,程序將處理從下一行開始的命令。
-
3.java的關鍵字分別是什麼,作用是什麼?
1).訪問修飾符的關鍵字(共4個)
關鍵字 |
意思 |
備註,常用形式等 |
public |
公有的 |
可跨包,開放訪問 |
protected |
受保護的 |
當前包內可用及有繼承關係的子類可訪問
|
private |
私有的 |
當前類可用 |
default:這個訪問修飾符是默認的,在Java8之後也是一種關鍵字,用來定義函數式接口的默認方法。
default:作爲訪問修飾符的話不需要顯式的書寫,(即缺省,什麼也不寫): 在同一包內可見,不使用任何修飾符。使用對象:類、接口、變量、方法。
2).定義類、接口、抽象類和實現接口、繼承類的關鍵字、實例化對象(共6個)
關鍵字 |
意思 |
備註,常用形式等 |
class |
類 |
public class A(){} 花括號裏有已實現方法體,一個源文件中至多一個用public關鍵字修飾的類(內部類除外),類名必須要與文件名相同 |
interface
|
接口 |
public interface B(){} 花括號裏有默認方法、抽象方法,靜態方法,Java8之後可以定義默認方法與靜態方法(都是可以實現的) |
abstract
|
聲明抽象 |
public abstract class C(){} 介於類與接口中間,可以有也可以沒有已經實現的方法體;有抽象方法的類一定是抽象類 |
implements
|
實現 |
用於類或接口實現接口public class A interface B(){} |
extends
|
繼承 |
用於類繼承類 public class A extends D(){},繼承的關鍵字(Java只支持單繼承) |
new |
創建新對象 |
A a=new A(); A表示一個類,使用new關鍵字來創建一個新的對象,申請內存空間 |
3).包的關鍵字(共2個)
關鍵字 |
意思 |
備註,常用 |
import |
引入包的關鍵字 |
當使用某個包的一些類時,僅需類名 然後使用ctrl+shift+o或者選定類名(類或屬性或方法)按住ctrl+單擊 即可自動插入類所在的包。如:JFrame 快捷鍵之後自動加入 import javax.swing.JFrame; |
package |
定義包的關鍵字 |
將所有有關的類放在一個包類以便查找修改等。如:package javake.flycat.draw002; |
4).數據類型的關鍵字(共12個)
(↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑點擊藍色文字查看具體使用與原理)
關鍵字 |
意思 |
備註,常用 |
byte |
字節型 |
8bit |
char |
字符型 |
16bit |
boolean |
布爾型 |
1bit |
short |
短整型 |
16bit |
int |
整型 |
32bit |
float |
浮點型 |
32bit |
long |
長整型 |
64bit |
double |
雙精度 |
64bit |
void |
無返回 |
public void A(){} 其他需要返回的經常與return連用 |
null |
空值 |
1bit |
true |
真 |
1bit |
false |
假 |
1bit |
5).條件循環(流程控制)(共12個)
關鍵字 |
意思 |
備註,常用 |
if |
如果 |
if(){} 如果小括號裏面怎麼怎麼樣 花括號就怎麼怎麼樣 |
else |
否則,或者 |
常與if連用,用法相同 |
while |
當什麼的時候 |
while 怎麼樣就do什麼 while(){} |
for |
滿足三個條件時 |
for ( ; ; ){} |
switch |
開關 |
switch(表達式) |
case |
返回開關裏的結果 |
|
default |
默認 |
|
do |
運行 |
長與while連用 |
break |
跳出循環 |
|
continue |
繼續 |
中斷本次循環,並並開始下一次 |
return |
返回 |
return 一個返回值類型 |
instanceof |
實例 |
java 中的instanceof 運算符是用來在運行時指出對象是否是特定類的一個實例。instanceof通過返回一個布爾值來指出,這個對象是否是這個特定類或者是它的子類的一個實例。返回Boolean。 |
6).修飾方法、類、屬性和變量(共9個)
關鍵字 |
意思 |
備註,常用 |
static |
靜態的 |
屬性和方法都可以用static修飾,直接使用類名.屬性和方法名。 只有內部類可以使用static關鍵字修飾一個類,調用直接使用類的對象名.內部類類名進行調用(後面的Java專欄會有講到這個內部類)。 static可以獨立存在。靜態塊。靜態修飾的成員或代碼塊會在類加載時進行內存申請。 |
final |
最終的不可被改變的 |
方法和類都可以用final來修飾; final修飾的類是不能被繼承的 ; final修飾的方法是不能被子類重寫。 final修飾的屬性就是常量。 |
super |
調用父類的方法 |
常見於繼承於父類的子類中的構造器。 |
this |
當前類的父類的對象 |
隱式的調用當前類的對象(表示調用這個類的對象,引用當前類的對象) this.addActionListener(al):等等 |
native |
本地 |
只用來修飾方法,意味着該方法是本地方法,本地方法沒有具體實現(實現的話需要c++等系統的後臺實現,常用的是內存中的運算)。 |
strictfp |
嚴格,精準 |
在做Java的浮點運算是使用的關鍵字,提高浮點運算的精準度。 |
synchronized |
線程,同步 |
同步鎖,解決多線程的數據或邏輯同步問題。 |
transient |
短暫,瞬變的 |
只能用來修飾成員屬性(全局的變量),被修飾的成員屬性不參與序列化。 |
volatile |
易失 |
修飾成員屬性,實現在多線程環境中數據的可見性,在不用同步的情況下實現數據同步的一種輕量級同步機制(簡單來說就是保證在多線程環境下的數據一致性) |
static 例子:
public class Test{
class A{} //內部類
ActionListener al=new ActionListener(···){} //匿名內部類
}
注意: 靜態塊優先於其他方法/類的執行(靜態修飾的成員或代碼塊會在類加載時進行內存申請)
7).錯誤處理(共5個)
關鍵字 |
意思 |
備註,常用 |
catch |
捕捉,抓取 |
1.try+catch (來自網上的資料) |
try |
嘗試,實驗 |
|
finally |
有沒有異常都執行 |
|
throw |
拋出一個異常對象 |
一些可以導致程序出問題的因素,比如書寫錯誤,邏輯錯誤或者是api的應用錯誤等等. 爲了防止程序的崩潰就要預先檢測這些因素,所以java 使用了異常這個機制. 在java中異常是靠 "拋出" 也就是英語的"throw" 來使用的,意思是如果發現到什麼異常的時候就把錯誤信息 "拋出" |
throws |
聲明一個異常可能被拋出 |
把異常交給他的上級管理,自己不進行異常處理 |
throw是你執行的動作。比如你覺得可能有異常,那麼就抱出去 如:
String a; if(a == null),
throw new exception("a爲null");
//所以throw是一個拋出去的動作
throws只用在一個方法的末端,表示這個方法體內部如果有異常,這拋給它的調用者。 如: public void add(int a, int b) throws Exception(); 這個方法表示,在執行這個方法的時候,可能產生一個異常,如果產生異常了,那麼誰調用了這個方法,就拋給誰。(來自百度)
8).不知道怎麼歸類(共2個)
關鍵字 |
意思 |
備註,常用 |
enum |
枚舉,列舉類 |
枚舉類型,引用數據類型中的類類型,常用於常量的存儲或懶漢模式 |
assert |
斷言 |
assert斷言在代碼測試時比較實用。 |
Enum:代表一組常用常量,可用來代表一類相同類型的常量值如:
性別:
public enum SexEnum {
male, female;
}
顏色:
public enum Color {
RED, BLUE,GREEN,BLACK;
}
注意:枚舉對象裏面的值都必須是唯一的。
附:throw 和throws的差別
區別一:
throw 是語句拋出一個異常;throws 是方法拋出一個異常;
throw語法:throw <異常對象>
在方法聲明中,添加throws子句表示該方法將拋出異常。
throws語法:[<修飾符>]<返回值類型><方法名>([<參數列表>])[throws<異常類>]
其中:異常類可以聲明多個,用逗號分割。
區別二:
throws可以單獨使用,但throw不能;
區別三:
throw要麼和try-catch-finally語句配套使用,要麼與throws配套使用。但throws可以單獨使用,然後再由處理異常的方法捕獲。
throws E1,E2,E3 只是告訴程序這個方法可能會拋出這些個異常,方法的調用者可能要處理這些異常。而這些異常E1,E2,E3可能是該函數體產生的。
而throw是明確之處這個地方要拋出這個異常。
void doA() throws Exception1, Exception3 {
try {
……
} catch(Exception1 e) {
throw e;
} catch(Exception2 e) {
System.out.println("出錯了");
}
if (a != b)
throw new Exception3("自定義異常");
}
代碼塊……中可能產生異常Exception1、Exception2和Exception3。
如果產生Exception1異常,則捕捉了之後拋出由該方法的調用者去做處理;
如果產生Exception2異常,則該方法自己做了處理(打印出了說出錯了),所以該方法就不會再向外拋出Exception2異常了,void doA() throws Exception1,,Excpetion3裏面的Exception2也就不用寫了;
而Exception3異常是該方法的某段邏輯出錯,程序員自己作了處理在該段邏輯錯誤的情況下拋出異常Exception3,則調用者也需要處理。
- throw語句用在方法體內,表示拋出異常,由方法體內的語句處理 。
- throws語句用在方法聲明後面,表示再拋出異常,由調用這個方法的上一級方法中的語句來處理。
- throws主要是聲明這個方法會拋出這種類型的異常,使其他地方調用它時知道要捕獲這個異常。
- throw是具體向外拋異常的動作,所以它是拋出一個異常實例。
- throws說明你有哪個可能,傾向throw的話,那就是你把那個傾向變成真實的了
於此同時:
- 1)throws出現在方法函數頭;而throw出現在函數體;
- 2)throws表示出現異常的一種可能性,並不一定會發生這些異常;throw則是拋出了異常,執行throw則一定拋出了某種異常;
- 3)兩者都是消極處理異常的方式(這裏的消極並不是說這種方式不好),只是拋出或者可能拋出異常,但是不會由函數去處理異常,真正的處理異常由函數的上層調用處理。
後記:
小編就是因爲之前對於關鍵字的記憶不牢固,在做項目的過程中經常遇到數值型關鍵字數據的精度丟失或非法字符的毛病,特此做一個總結,若有什麼錯誤,還請不吝賜教,下方留言。本文章來源於個人總結歸納與網絡文章的整理,若有侵權,告知立刪。
具體的關鍵字使用請參考專欄:精裝Java