我正在阅读一本sais的电子书:
int :b;
int e#;
不是合法的标识符,但我不明白为什么“:”和“#”不是合法的令牌。 你有什么想法吗?
答案 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.