JAVA 心 得
   今天是: 欢迎光临

标识符
标识符的定义规则
java标识符的定义规则如下(平时使用一般不会遇到问题)
标识符由字母、数字、货币符号(¥,$等)、连接符号(_等)组成。(这里的字母为unicode字符集,而不再局限于传统的26个英文字母)
标识符的首字符可以使字母、货币符号与连接符号,但不能是数字
标识符不能与java中的关键字相同
标识符不能喝java中预定义的字面常量名称相同(true、false、null)
但是Unicode字符集的取值范围为U+0000~U+10FFFF,但是范围内不是每一个Unicode值都与一个字符对应,这意味着,并非整个Unicode字符集在java中都可以作为标识符使用。其次,不能做Java标识符首字符的字符集也不止0~9这10个字符集。可以使用character类中的两个静态方法来判断标识符的合法性。其中isJavaIdentifierStart用来判断代码点对应的字符是否可以作为Java标识符的一部分
public static boolean isJavaIdentifierStart(int codePoint)
public static boolean isJavaIdentifierPart(int codePoint)
重新定义标识符的定义规则
标识符的首字符所对应的代码点必须使得character类中的isJavaIdentifierStart方法返回为true,后续字符所对应的代码点必须使得character类的isJavaIdentifierPart方法的返回值为true
标识符不能与Java中的关键字相同
标识符不能喝Java中预定义的字面常量名称相同(true、false、null)
标识符的长度必须在系统所支持的范围内(这是Java虚拟机要求的)
“$”标识符
尽管$可以作为标识符使用,但是我们应该尽量避免对其使用。因为$通常在编译器生成的标识符名称中使用,如果我们也使用这个符号,可能会有一些意想不到的错误发生
因为“$”在被编译器所使用,在源文件(.java文件)编译成字节码(.class文件)后,会成为顶层类型与嵌套类型之间的连接符。例如,如果存在一个顶层类A,在其内声明一个成员类B,南无编译之后就会产生两个class文件,分别为A.class与A$B.class。也就是会如果你定义一个顶层类为A.class,再再里面声明一个成员类A$B.class,那么就会生成三个文件,分别为A$B.class(顶层类),A.class与A$B.class(A类的成员类,也就是类A$B)。由于会存在两个A$B.class,所以编译会出错。
标识符的最大长度
在Java语言规范中,标识符的长度是任意的。但是,在Java的虚拟机规范中,标识符的长度是有限制的。在class文件中,代表标识符的常量字符串存储在CONSTANT_Utf8_info表中,而该表使用两个字节(length项),来表示字符串的长度,length是无符号类型,因此最大长度为2的16次方减1,即65535.这就是标识符的最大长度。但是如果标识符含有不在范围(‘\u0001’~‘\u007f’)的字符,会鉴赏最大长度。