Java 变量名中$的含义是什么?

Java 变量名中$的含义是什么?,java,Java,最近,我读到Java变量名中允许使用符号$,但有一个特殊的含义。不幸的是,它没有提到这个特殊的意义是什么 因此,我在这里问:$in变量名在Java中的特殊含义是什么 这是我的确切引述 Java:问题解决和编程入门 沃尔特·萨维奇: Java允许美元符号$出现在标识符中, 但是这些标识符有一个特殊的含义,所以您不应该使用 标识符中的$符号 $在编译器内部用于修饰某些名称。维基百科: 编译此程序将生成三个.class文件: foo.class,包含主(外部)类foo foo$bar.class,

最近,我读到Java变量名中允许使用符号$,但有一个特殊的含义。不幸的是,它没有提到这个特殊的意义是什么

因此,我在这里问:$in变量名在Java中的特殊含义是什么

这是我的确切引述

Java:问题解决和编程入门

沃尔特·萨维奇:

Java允许美元符号$出现在标识符中, 但是这些标识符有一个特殊的含义,所以您不应该使用 标识符中的$符号


$
在编译器内部用于修饰某些名称。维基百科:

编译此程序将生成三个.class文件:

  • foo.class
    ,包含主(外部)类
    foo
  • foo$bar.class
    , 包含命名的内部类
    foo.bar
  • foo$1.class
    ,包含 匿名内部类(本地到方法
    foo.zark
所有这些类名都是有效的(因为JVM规范中允许使用
$
符号)

类似地,
javac
在一些自动生成的变量名中使用
$
:例如,
this$0
等用于从内部类到外部类的隐式
this
引用

最后,:

$
字符只能在机械生成的源代码中使用 代码,或者很少访问遗留系统上预先存在的名称


变量名中的
$
没有特殊含义

虽然技术上允许,但以美元符号开头的变量名违反了惯例,通常仅由代码生成器使用

引用甲骨文的话:

变量名区分大小写。变量的名称可以是任何合法标识符—Unicode字母和数字的无限长序列,以字母、美元符号“$”或下划线字符“\ux”开头。但是,惯例是始终以字母开头变量名,而不是“$”或“\u1”。此外,根据惯例,美元符号字符从未使用过。您可能会发现某些情况下,自动生成的名称将包含美元符号,但您的变量名称应始终避免使用美元符号。下划线字符也有类似的约定;虽然从技术上讲,变量名称以“\u1”开头是合法的,但不鼓励这种做法。不允许使用空白


那不是真的。我可以把我的类命名为Test$问题不是问类名,而是问变量。相关线程:引用你读到的地方可能会很好。好吧,没有什么特别的意义,所以你可以在变量声明中使用它。但它违反了Java命名约定。也许他说的是类名?@MisterSmith我怀疑作者提到的“特殊含义”只是在机器生成的代码上使用它的惯例。“特殊意义”在惯例上是特殊的,而不是在语义上。
public class foo {
    class bar {
        public int x;
    }

    public void zark () {
        Object f = new Object () {
            public String toString() {
                return "hello";
            }
        };
    }
}