java语言规范中的java有效标识符

时间:2015-09-05 21:36:51

标签: java identifier

SO上的许多地方导致Identifiers上的JLS部分,但我对那里的内容有疑问。

  

“Java字母”包括大写和小写ASCII拉丁字母   A-Z(\ u0041- \ u005a)和a-z(\ u0061- \ u007a),以及历史   原因,ASCII下划线(_,或\ u005f)和美元符号($,或   \ u0024)。 $字符只能用于机械生成   源代码,或者很少访问遗留的预先存在的名称   系统。 “Java数字”包括ASCII数字0-9   (\ u0030- \ u0039)。

但它继续说:

  

可以从整个Unicode字符集中绘制字母和数字,   它支持当今世界上使用的大多数编写脚本,   包括中文,日文和韩文的大套。这个   允许程序员在他们的程序中使用标识符   用他们的母语写成。

我不明白这两者是如何都是真的。第一部分似乎确切地说明了哪些字符是允许的,而第二部分似乎表示津贴更灵活。

我同意使用“包括”代替“包括但不限于”表示它并不完全矛盾。但它也首先专门指“Java字母”/“Java数字”,然后将其放宽为“字母”/“数字”。我的主要观点是缺乏清晰度,我希望确认我的意思。

2 个答案:

答案 0 :(得分:1)

根据问题Legal identifiers in Java,您可以看到有许多合法标识符。

[对于使用罗马字母的语言]在使用约定命名标识符时,仅使用字母数字字符和偶尔使用下划线。但是,可以使用大量字符。

第一段是指java程序员使用合理一致且可读的命名方案的代码风格或约定。你引用的第二段解释说,JVM会接受大量其他角色 - 尽管你的同事们可能不赞成。

答案 1 :(得分:1)

第一部分是第二部分的特例,两部分中提到的字符必须满足JLS 3.8中提到的标准,这里错过了

  

“Java letter”是Character.isJavaIdentifierStart(int)方法返回true的字符。   “Java letter-or-digit”是该方法的字符   Character.isJavaIdentifierPart(int)返回true。

上述方法接受/验证与包含Basic-Latin字符集(第1节)的整个Unicode字符集(第2节)中的字符对应的代码点。

通常,你永远不会看到任何人超越他们的Java源文件中的Basic-Latin字符集。

相关问题