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

时间:2011-09-20 11:13:44

标签: java

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

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

以下是

的确切引用
  

Java:问题解决和编程简介

来自Walter Savitch:

  

Java确实允许美元符号符号$出现在标识符中,   但这些标识符具有特殊含义,因此您不应使用   标识符中的$符号。

2 个答案:

答案 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)

no special meaning for it

  

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