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

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建议如下:

$字符应仅用于机械生成的源代码,或者很少用于访问遗留系统上的预先存在的名称.

  • 问题不是要求类名,而是要求变量. (4认同)

pab*_*iva 34

没有特殊意义:

"变量名称区分大小写.变量的名称可以是任何合法标识符 - Unicode字母和数字的无限长度序列,以字母开头,美元符号"$"或下划线字符"_".但是,总是用一个字母开始你的变量名,而不是"$"或"_".另外,按照惯例,美元符号字符根本就不会被使用.你可能会发现一些自动生成名称的情况包含美元符号,但你的变量名应该总是避免使用它.下划线字符存在类似的约定;虽然用"_"开始变量的名称在技术上是合法的,但不鼓励这种做法.不允许使用空格."