2013-10-30 53 views
0

在Java語言規範6.2 Link是否所有名稱標識符?

這裏是下面的代碼示例:

class Test { 
    public static void main(String[] args) { 
     Class c = System.out.getClass(); 
     System.out.println(c.toString().length() + 
          args[0].length() + args.length); 
    } 
} 

它規定:

標識符測試,主,和args的第一事件和c不是名字。相反,它們用於聲明中以指定已聲明實體的名稱。名稱String,Class,System.out.getClass,System.out.println,c.toString,args和args.length出現在示例中。

但是像類和字符串的名稱也標識符?什麼是標識符?

+1

這裏使用「名稱」對我來說似乎很陌生。我假設_name_表示_named reference_,在這種情況下,排除'Test','main'以及'args'和'c'(因爲聲明!=引用)的第一次出現是有意義的。所有命名的引用和聲明都是標識符,所以是的,'Class'和'String'是標識符。 –

+0

這與我所做的解釋是一樣的。我不知道我是如何錯過這一點,但進一步下來說:「有人可能會想知道爲什麼這些表達使用標識符而不是簡單的名稱,畢竟這只是一個標識符。」因此,名稱似乎也是標識符。 – Teletha

回答

1

標識符是一種令牌類型。來自lexical structure of Java的規格:

3.8。標識符

標識符是Java字母和Java數字的無限長序列,其中第一個必須是Java字母。

Identifier: 
    IdentifierChars but not a Keyword or BooleanLiteral or NullLiteral 

IdentifierChars: 
    JavaLetter 
    IdentifierChars JavaLetterOrDigit 

JavaLetter: 
    any Unicode character that is a Java letter (see below) 

JavaLetterOrDigit: 
    any Unicode character that is a Java letter-or-digit (see below) 

A 「的Java字母」 是其中該方法 Character.isJavaIdentifierStart(int)的返回true的字符。

「Java字母或數字」是一種字符,方法 Character.isJavaIdentifierPart(int)返回true。

通過 「Java字母」 包括大寫和小寫ASCII拉丁字母AZ (\ u0041- \ u005a)和AZ(\ u0061- \ u007a),並且,由於歷史 原因,ASCII下劃線(_,或\ u005f)和美元符號($,或 \ u0024)。 $字符只能用於機械生成的 源代碼,或者很少用於訪問傳統 系統上的預先存在的名稱。

「Java數字」包括ASCII數字0-9(\ u0030- \ u0039)。

字母和數字可能來自整個Unicode字符集, ,它支持當今世界上大多數正在使用的寫腳本, 包括中文,日文和韓文的大集合。這個 允許程序員在他們的程序中使用以其母語編寫的 。

標識符不能具有相同的拼寫(Unicode字符 序列)作爲關鍵字(§3.9),布爾值(§3.10.3),或空 字面(§3.10.7)或編譯期發生時間錯誤。

+0

所以你的解釋是名稱也是標識符? – Teletha

+0

你可以這麼說。如JLS中所定義的,使用標識符指定「名稱」。不是所有的標識符都指定「名稱」。 – Joni

+0

太棒了。謝謝! – Teletha

0

標識符是用戶定義符號

它允許編譯器區分符號表中相同類型對象的綁定。

相關問題