今天偶然看到一本书涉及到标识符的问题仔细查找了一下关于标识符的资料,总结了一下
首先是标识符的定义:
Java标识符由数字,字母和下划线(_),美元符号($)组成。在Java中是区分大小写的,而且还要求首位不能是数字。最重要的是,Java关键字不能当作Java标识符。
1.类和接口名。每个字的首字母大写,含有大小写。例如,MyClass,HelloWorld,Time等。
2.方法名。首字符小写,其余的首字母大写,含大小写。尽量少用下划线。例如,myName,setTime等。这种命名方法叫做驼峰式命名。
3.常量名。基本数据类型的常量名使用全部大写字母,字与字之间用下划线分隔。对象常量可大小混写。例如,SIZE_NAME。
4.变量名。可大小写混写,首字符小写,字间分隔符用字的首字母大写。不用下划线,少用美元符号。给变量名是尽量做到见名知义。
其中的定义对于“$”的用法说的很是模糊,问题就出现这里,尽管可以应用$来命名标识符但会出现各种各样的问题,因为$符号在Java编译时会使用到,主要体现在内部类的定义时。
e.g
class Outer {
class Inner{}
}
当它编译时会产生两个.class文件Outer.class和Outer$Inner.class。正是这个符号$如果当我把程序改成这样:
public class Outer$Inner{
public static void main(String[] args){
System.out.println();
}
}
class Outer {
class Inner{}
}
无论什么编译器都会报错,Duplicate nested type Inner.当编译时编译器的自作主张就是这个问题的导火索,或许对于这么多的java标识符表示没必要死守着一个看起来很炫酷的$不放手。