美元在variables名称中的含义是什么?
最近我读了Javavariables名称中允许的符号$,但有一个特殊的含义。 不幸的是没有提到这个特殊的含义。
所以我在这里问:Java中variables名称的特殊含义是什么?
这里是从确切的报价
Java:解决问题和编程的简介
来自Walter Savitch:
Java确实允许美元符号$出现在标识符中,但是这些标识符有特殊的含义,所以你不应该在标识符中使用$符号。
编译器内部使用$
来装饰某些名称。 维基百科给出了下面的例子 :
public class foo { class bar { public int x; } public void zark () { Object f = new Object () { public String toString() { return "hello"; } }; } }
编译这个程序会产生三个.class文件:
- 包含主(外部)类
foo
foo.class
-
foo$bar.class
,包含指定的内部类foo.bar
-
foo$1.class
,包含匿名内部类(局部于方法foo.zark
)
所有这些类名都是有效的(因为在JVM规范中允许使用$
符号)。
[报价结束]
类似地, javac
在一些自动生成的variables名中使用$
:例如, this$0
等被用于从内部类到它们外部类的隐式引用。
最后, JLSbuild议如下 :
$
字符只能用于机械生成的源代码,或者很less用于访问遗留系统中的预先存在的名称。
它没有特别的意义 :
“variables名称区分大小写,variables名称可以是任何合法的标识符 – 一个以字母,美元符号”$“或下划线字符”_“开头的无限长的Unicode字母和数字序列。 ,但是,总是用一个字母开始variables名称,而不是“$”或“_”。另外,美元符号字符根本不会被使用,您可能会发现某些情况下自动生成的名字会包含美元符号,但是你的variables名应该总是避免使用它,对于下划线字符也存在类似的约定;从技术angular度来说,用“_”开始variables名是合法的,这种做法是不鼓励的,不允许有空格。