Java中的關鍵字和識別符號
一.Java中對goto關鍵字的處理
在Java中,我們不能使用goto關鍵字,而是使用迴圈標籤,但是為了避免程式設計師自行使用goto,所以保留了goto作為一個關鍵字。類似的關鍵字還有const。
二.true、false、null是否是關鍵字
在Java中,true、false、null都不是關鍵字,而是字面常量(也稱為直接量),其中,true和false是布林型別的字面常量,null是引用型別的字面常量。這三個字面常量也不能作為識別符號使用。
三.Java中的關鍵字
關鍵字 | 含義 |
abstract | 表明類或者成員方法具有抽象屬性 |
assert | 用來進行程式除錯 |
boolean | 基本資料型別之一,布林型別 |
break | 提前跳出一個塊 |
byte | 基本資料型別之一,位元組型別 |
case | 用在switch語句之中,表是其中的一個分支 |
catch | 用在異常處理中,用來捕捉異常 |
char | 基本資料型別之一,字元型別 |
class | 類 |
const | 保留關鍵字,沒有具體含義 |
continue | 回到一個塊的開始處 |
default | 預設,例如,用在switch語句中,表明一個預設的分支 |
do | 用在do-while迴圈結構中 |
double | 基本資料型別之一,雙精度浮點數型別 |
else | 用在條件語句中,表明當條件不成立時的分支 |
enum | 列舉 |
extends | 表明一個型別是另一個型別的子型別,這裡常見的型別有類和介面 |
final | 用來說明最終屬性,表明一個類不能派生出子類,或者成員方法不能被覆蓋,或者成員域的值不能被改變 |
finally | 用於處理異常情況,用來宣告一個基本肯定會被執行到的語句塊 |
float | 基本資料型別之一,單精度浮點數型別 |
for | 一種迴圈結構的引導詞 |
goto | 保留關鍵字,沒有具體含義 |
if | 條件語句的引導詞 |
implements | 表明一個類實現了給定的介面 |
import | 表明要訪問指定的類或包 |
instanceof | 用來測試一個物件是否是指定型別的例項物件 |
int | 基本資料型別之一,整數型別 |
interface | 介面 |
long | 基本資料型別之一,長整數型別 |
native | 用來宣告一個方法是由與計算機相關的語言(如C/C++/FORTRAN語言)實現的 |
new | 用來建立新例項物件 |
package | 包 |
private | 一種訪問控制方式:私用模式 |
protected | 一種訪問控制方式:保護模式 |
public | 一種訪問控制方式:共用模式 |
return | 從成員方法中返回資料 |
short | 基本資料型別之一,短整數型別 |
static | 表明具有靜態屬性 |
strictfp | 用來宣告FP_strict(單精度或雙精度浮點數)表示式遵循IEEE 754算術規範 |
super | 表明當前物件的父型別的引用或者父型別的構造方法 |
switch | 分支語句結構的引導詞 |
synchronized | 表明一段程式碼需要同步執行 |
this | 指向當前例項物件的引用 |
throw | 丟擲一個異常 |
throws | 宣告在當前定義的成員方法中所有需要丟擲的異常 |
transient | 宣告不用序列化的成員域 |
try | 嘗試一個可能丟擲異常的程式塊 |
void | 聲明當前成員方法沒有返回值 |
volatile | 表明兩個或者多個變數必須同步地發生變化 |
while | 用在迴圈結構中 |
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.