java合法标识符

时间:2012-09-10 12:17:30

标签: java scjp

我正在阅读一本sais的电子书:

int :b;
int e#;

不是合法的标识符,但我不明白为什么“:”和“#”不是合法的令牌。 你有什么想法吗?

3 个答案:

答案 0 :(得分:6)

因为Java Language Specification这样说:

  

标识符是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)
  

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

     

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

     

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

     

“Java数字”包括ASCII数字0-9(\ u0030- \ u0039)。

     

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

答案 1 :(得分:1)

有效标识符在JLS #3.8中定义。特别是:

  

A" Java letter"是Character.isJavaIdentifierStart(int)方法返回true的字符。

     

A" Java字母或数字"是Character.isJavaIdentifierPart(int)方法返回true的字符。

这两行输出false,这会使您的两个标识符无效:

System.out.println(Character.isJavaIdentifierPart(':'));
System.out.println(Character.isJavaIdentifierPart('#'));

请注意,有效的标识符包括A-Z,a-z,_,$以及许多"异国情调"字符。例如,这是一个有效的标识符:

int a_£à胥;

答案 2 :(得分:0)

来自JLS

An identifier is an unlimited-length sequence of Java letters and Java digits, 
the first of which must be a Java letter. 

...

The "Java letters" include uppercase and lowercase ASCII Latin letters A-Z (\u0041-\u005a), 
and a-z (\u0061-\u007a), and, for historical reasons, the ASCII underscore (_, or \u005f) 
and dollar sign ($, or \u0024). The $ character should be used only in mechanically generated 
source code or, rarely, to access pre-existing names on legacy systems.