我正在读一本 sais 的电子书:
int :b;
int e#;
不是合法的标识符,但我不明白为什么“:”和“#”不是合法的令牌。你有什么想法吗?
因为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 字母”是方法 Character.isJavaIdentifierStart (int) 返回 true 的字符。
“Java 字母或数字”是方法 Character.isJavaIdentifierPart (int) 返回 true 的字符。
“Java 字母”包括大写和小写 ASCII 拉丁字母 A-Z(\ u0041-\ u005a)和 a-z(\ u0061-\ u007a),以及出于历史原因,ASCII 下划线(_或\ u005f)和美元符号($或\ u0024)。$字符应仅在机械生成的源代码中使用,或者很少在访问现有名称时使用。
“Java 数字”包括 ASCII 数字 0-9 (\ u0030-\ u0039)。
字母和数字可以从整个 Unicode 字符集中提取,该字符集支持当今世界上使用的大多数编写脚本,包括中文,日文和韩文的大集。这允许程序员在其程序中使用以其母语编写的标识符。
有效标识符在JLS #3.8中定义。
“Java 字母”是方法 Character.isJavaIdentifierStart (int) 返回 true 的字符。
“Java 字母或数字”是方法 Character.isJavaIdentifierPart (int) 返回 true 的字符。
这两行输出 false,这使得你的两个标识符无效:
System.out.println(Character.isJavaIdentifierPart(':'));
System.out.println(Character.isJavaIdentifierPart('#'));
请注意,有效的标识符包括 A-Z,a-z,_,$以及许多“外来”字符。例如,这是一个有效的标识符:
int a_£à胥;
从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 suld be used only in mechanically generated
source code or, rarely, to access pre-existing names on legacy systems.
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(12条)