美元在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名是合法的,这种做法是不鼓励的,不允许有空格。