2015-09-05 83 views
1

SO上的許多地方導致Identifiers上的JLS部分,但是我在那裏寫了一些問題。來自java語言規範的java有效標識

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

但它接着說:

字母和數字可以從整個Unicode字符集, 它支持大多數目前編寫腳本在世界上, 包括大集繪製對於中文,日文和韓文。這個 允許程序員在他們的程序中使用以其母語編寫的 。

我不明白這些都可能是真實的。第一部分似乎確切地規定了哪些字符是允許的,而第二部分似乎表示允許更靈活。

我同意使用「包含」而不是「包括但不限於」表明它並不完全相反。但它也首先特指「Java字母」/「Java數字」,然後將其放寬爲「字母」/「數字」。我的主要觀點是缺乏清晰度,我想確認我的意思。

+1

你在哪裏看到矛盾?支持拉丁字母,一些標誌,數字,現在還有一些unicode字符。 – Tom

+0

好的。當然,這沒有錯,但我仍然認爲這是誤導/不清楚的。你是否同意http://cui.unige.ch/isi/bnf/JAVA/identifier.html正確完整地表示規範說明的內容? – lf215

回答

1

根據問題Legal identifiers in Java您可以看到有許多合法標識符。

[對於使用羅馬字母語言]僅字母數字字符和偶爾下劃線通過慣例命名標識符時使用。但是,可以使用大量的字符。

第一段引用了java程序員之間的代碼風格或約定,以使用合理的一致性和可讀性命名方案。你引用的第二段說明了JVM可以接受的大量其他字符 - 儘管你的同行程序員可能會拒絕。

1

第一部分是第二的一種特殊情況,並且在這兩個部分中提到的字符必須滿足在JLS 3.8即在這裏漏掉提到的標準,

A「的Java字母」是其中字符Character.isJavaIdentifierStart(int)方法返回true。 「Java字母或數字」是一個字符,方法 Character.isJavaIdentifierPart(int)返回true。

上述方法接受/驗證對應於包含基本拉丁字符集(第1節)的整個Unicode字符集(第2節)中的字符的代碼點。

通常情況下,你將永遠不會看到任何人超越Java源文件中的Basic-Latin字符集。