52 java
最近我读到了Java变量名中允许使用符号$,但具有特殊含义.不幸的是,没有提到这个特殊含义是什么.
因此我在这里问:Java中变量名中$的特殊含义是什么?
这是来自的确切报价
Java:问题解决和编程简介
来自Walter Savitch:
Java允许美元符号符号$出现在标识符中,但这些标识符具有特殊含义,因此您不应在标识符中使用$符号.
NPE*_*NPE 51
$
编译器在内部使用它来装饰某些名称.维基百科给出了以下示例:
public class foo {
class bar {
public int x;
}
public void zark () {
Object f = new Object () {
public String toString() {
return "hello";
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
编译此程序将生成三个.class文件:
foo.class
,包含主(外)类 foo
foo$bar.class
,包含指定的内部类 foo.bar
foo$1.class
,包含匿名内部类(方法的本地foo.zark
)所有这些类名都有效(因为$
JVM规范中允许使用符号).
与此类似,javac
使用$
在一些自动生成的变量名:例如,this$0
等人用于隐式this
从内部类到它们的外类的引用.
最后,JLS建议如下:
该
$
字符应仅用于机械生成的源代码,或者很少用于访问遗留系统上的预先存在的名称.