一.Java中對goto關鍵字的處理
在Java中,我們不能使用goto關鍵字,而是使用迴圈標籤,但是為了避免程式員自行使用goto,所以保留了goto作為一個關鍵字。類似的關鍵字還有const。
二.true、false、null是否是關鍵字
在Java中,true、false、null都不是關鍵字,而是字面常量(也稱為直接量),其中,true和false是布爾類型的字面常量,null是參考型別的字面常量。這三個字面常量也不能作為標識符使用。
三.Java中的關鍵字
| 關鍵字 |
含義 |
| abstract |
表明類或者成員方法具有抽象屬性 |
| assert |
用來進行程式調試 |
| boolean |
基礎資料型別 (Elementary Data Type)之一,布爾類型 |
| break |
提前跳出一個塊 |
| byte |
基礎資料型別 (Elementary Data Type)之一,位元組類型 |
| case |
用在switch語句之中,表是其中的一個分支 |
| catch |
用在異常處理中,用來捕捉異常 |
| char |
基礎資料型別 (Elementary Data Type)之一,字元類型 |
| class |
類 |
| const |
保留關鍵字,沒有具體含義 |
| continue |
回到一個塊的開始處 |
| default |
預設,例如,用在switch語句中,表明一個預設的分支 |
| do |
用在do-while迴圈結構中 |
| double |
基礎資料型別 (Elementary Data Type)之一,雙精確度浮點數類型 |
| else |
用在條件陳述式中,表明當條件不成立時的分支 |
| enum |
枚舉 |
| extends |
表明一個類型是另一個類型的子類型,這裡常見的類型有類和介面 |
| final |
用來說明最終屬性,表明一個類不能派生出子類,或者成員方法不能被覆蓋,或者成員域的值不能被改變 |
| finally |
用於處理異常情況,用來聲明一個基本肯定會被執行到的語句塊 |
| float |
基礎資料型別 (Elementary Data Type)之一,單精確度浮點數類型 |
| for |
一種迴圈結構的引導詞 |
| goto |
保留關鍵字,沒有具體含義 |
| if |
條件陳述式的引導詞 |
| implements |
表明一個類實現了給定的介面 |
| import |
表明要訪問指定的類或包 |
| instanceof |
用來測試一個對象是否是指定類型的執行個體對象 |
| int |
基礎資料型別 (Elementary Data Type)之一,整數類型 |
| interface |
介面 |
| long |
基礎資料型別 (Elementary Data Type)之一,長整數類型 |
| native |
用來聲明一個方法是由與電腦相關的語言(如C/C++/FORTRAN語言)實現的 |
| new |
用來建立新執行個體對象 |
| package |
包 |
| private |
一種存取控制方式:私用模式 |
| protected |
一種存取控制方式:保護模式 |
| public |
一種存取控制方式:共用模式 |
| return |
從成員方法中返回資料 |
| short |
基礎資料型別 (Elementary Data Type)之一,短整數類型 |
| static |
表明具有靜態屬性 |
| strictfp |
用來聲明FP_strict(單精確度或雙精確度浮點數)運算式遵循IEEE 754算術規範 |
| super |
表明當前對象的父類型的引用或者父類型的構造方法 |
| switch |
分支語句結構的引導詞 |
| synchronized |
表明一段代碼需要同步執行 |
| this |
指向當前執行個體對象的引用 |
| throw |
拋出一個異常 |
| throws |
聲明在當前定義的成員方法中所有需要拋出的異常 |
| transient |
聲明不用序列化的成員域 |
| try |
嘗試一個可能拋出異常的程式塊 |
| void |
聲明當前成員方法沒有傳回值 |
| volatile |
表明兩個或者多個變數必須同步地發生變化 |
| while |
用在迴圈結構中 |
四.Java標識符的定義規則
1.大多數人理解的Java標誌符的定義規則:
(1).標識符由字母、數字、貨幣符號(¥、$)、串連符號(_)組成。
(2).標識符的首字母可以是字母、貨幣符號與串連符號,但是不能為數字。
(3).標識符不能與Java中的關鍵字相同。
(4).標識符不能與Java中預定義的字面常量名稱相同(如true、false、null)。
上面的規則在大部分時候是正確的,但是要注意這裡的字母不只是傳統中的26個英文字母,而是Unicode字元集,Unicode字元集的取值範圍是U+0000~U+10FFFF,但是不是每一個Unicode值都與一個字元相對應,這就意味著不是整個Unicode字元集都可以作為Java中的標識符。還有就是不能作為Java標識符首字母的字元集,也不僅僅是簡單的0~9這10個數字。那麼我們怎麼判斷一個Unicode是否可以作為Java標識符呢。在Character中有這樣兩個方法可以進行判斷:
public static boolean isJavaIdentifierStart(char ch);判斷對應的字元是否可以作為Java的標識符的首字元
public static boolean isJavaIdentifierPart(char ch);判斷對應的字元是否可以作為Java的標識符
由於Unicode字元集的擴充,為了能夠處理增補字元(U+10000~U+10FFFF),在jdk1.5中增加了兩個方法,也用於此作用:
public static boolean isJavaIdentifierStart(int codePoint);判斷代碼點對應的字元是否可以作為Java的標識符的首字元
public static boolean isJavaIdentifierPart(int codePoint);判斷代碼點對應的字元是否可以作為Java的標識符
2.現在,我們重新定義一下標識符的定義規則:
(1).標識符的首字母對應的代碼點必須使得Character類的isJavaIdentifierStar()方法傳回值為true,後續的字元對應的代碼點必須使得Character類的isJavaIdentifierPart()的傳回值為true。
(2).標識符不能與Java中的關鍵字相同。
(3).標識符不能和Java中預定義的字面常量名稱相同。
(4).標識符的長度必須在系統所支援的範圍內。
五.注意符號“$”的使用
在定義Java標識符的時候,我們可以使用$,並且可以使用它作為標識符的首字母,但是我們需要注意$這個符號可以在內部類中使用,所以當我們使用$作為關鍵字字元時,需要考慮到這一點。
public class User$Vip {public static void main(String[] args) {}}class User{class Vip{void print(){System.out.println("vip");}}}
上面這個例子就是因為類標誌符中使用$,與內部類中的$衝突,所以編譯的時候會報錯,提示User.Vip類重複了。其原因是在編譯為class檔案的時候,會存在兩個User$Vip.class,所以會報錯。
六.標識符的最大長度
在Java語言規範中,對於Java標誌符的長度是沒有限制的,但是在Java虛擬機器規範中,標識符是有長度限制的。在class檔案中,代表標識符的常量字串儲存在CONSTANT_Utf8_info表中,這個表用了兩個位元組的來表示字串的長度。所以最大表示65535.