为什么我不允许将Java源代码文件中的字符用作变量名?

时间:2016-01-28 19:23:28

标签: java character-encoding compilation

可以在Java变量名中使用的字符有哪些规则?

我有这个示例代码:

public class Main {
    public static void main(String[] args)  {
        int k = 4;
        System.out.println(s);
    }
}

将无法编译:

javac Main.java
Main.java:3: error: illegal character: '\udd1e'
        int k = 4;
              ^
1 error

那么为什么Java编译器会为'' ? (\ uD834 \ uDD1E)

在ideone.com中相同:http://ideone.com/fnmvpG

1 个答案:

答案 0 :(得分:6)

  

可以在Java变量名中使用的字符有哪些规则?

规则在section 3.8中的标识符的JLS中。您对Character.isJavaIdentifierPart感兴趣:

  

如果满足以下任何条件,则字符可能是Java标识符的一部分:

  • 这是一封信
  • 它是货币符号(例如' $')
  • 它是一个连接标点字符(例如' _')
  • 这是一个数字
  • 它是一个数字字母(例如罗马数字字符)
  • 是一个组合标记
  • 这是一个非间距标记
  • isIdentifierIgnorable(codePoint)为字符
  • 返回true

当然,这假设您使用适当的编码编译代码。

您显然尝试使用的角色是U+1D11E,这与上述情况无关。它是一个音乐高音谱号,位于"符号,其他"类别。