最近我读到Java变量名中允许使用符号$,但具有特殊含义。不幸的是,没有提到这个特殊含义是什么。
因此我在这里问:Java中变量名中$的特殊含义是什么?
以下是
的确切引用Java:问题解决和编程简介
来自Walter Savitch:
Java确实允许美元符号符号$出现在标识符中, 但这些标识符具有特殊含义,因此您不应使用 标识符中的$符号。
答案 0 :(得分:51)
$
来装饰某些名称。维基百科gives the following example:
public class foo {
class bar {
public int x;
}
public void zark () {
Object f = new Object () {
public String toString() {
return "hello";
}
};
}
}
编译此程序将生成三个.class文件:
foo.class
,包含主要(外部)类foo
foo$bar.class
,
包含指定的内部类foo.bar
foo$1.class
,包含
匿名内部类(方法foo.zark
的本地)所有这些类名都有效(因为JVM规范中允许使用$
符号)。
同样,javac
在一些自动生成的变量名称中使用$
:例如,this$0
等用于隐式{ {1}}从内部类到其外部类的引用。
最后,the JLS recommends the following:
this
字符只能在机械生成的源中使用 代码,或者很少访问旧系统上的预先存在的名称。
答案 1 :(得分:34)
“变量名称区分大小写。变量名称可以是任何合法标识符 - Unicode字母和数字的无限长度序列,以字母开头,美元符号”$“或下划线字符”_“然而,惯例是总是用一个字母开头你的变量名,而不是“$”或“_”。此外,按照惯例,美元符号字符根本不会被使用。你可能会发现一些情况,其中auto-生成的名称将包含美元符号,但您的变量名称应始终避免使用它。下划线字符存在类似的约定;虽然使用“_”开始变量的名称在技术上是合法的,但不鼓励这种做法。空格不是允许“。