【问题标题】:What is the difference between a.b and a$b, please? [duplicate]请问 a.b 和 a$b 有什么区别? [复制]
【发布时间】:2012-01-30 11:35:20
【问题描述】:

有时我会遇到像 aClass$field 而不是 aClass.field 这样的表达式。在java中是什么意思?也许这是一个原始问题,但不可能在网上搜索 $。它肯定会给出非编程的答案。所以,请帮忙。

【问题讨论】:

  • @skaffman 不,谢谢。您提到的问题是关于该主题的使用的更详细的问题。这对我没有帮助,我害怕。我问的是最简单的问题——a$b 是什么?

标签: java class syntax inner-classes


【解决方案1】:

$文件的意思,根据JLS

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

类文件中的$ 表明(例如AClass$BClass.classBClass 嵌套在AClass 中。

A.B 仅在代码级别,而A$B 在生成的类级别。

【讨论】:

  • 谢谢你,+1,但后来的答案对我来说更容易理解。
【解决方案2】:

$ 在 Java 中没有特殊含义。它可以用来命名每个变量或方法,也可以作为第一个(或唯一一个)字符。例如,下面的类是完全合法的。

public class Test {

    private int $;

    private int $field;

    private int my$field;

    private void $() {
    }

    private void $method() {
    }

    private void my$method() {
    }

}

但是你不能使用$ 来命名一个类。当 Java 编译器在类A 中遇到内部类B 时,生成的.class 文件将命名为A$B.class。所以使用$ 字符命名一个类会导致编译错误。

【讨论】:

  • 感谢您的可以理解的回答,就在我原始问题的水平上。顺便说一句:在 Eclipse 的选项卡中没有 .class 后缀。是简单的缩短还是有更深层次的意义?
  • Eclipse 中的选项卡将显示类的逻辑名称。如果您正在编辑一个带有Test 类的Test.java 文件,Eclipse 将只向您显示类名TestTest 类最终将编译为 Test.class 文件。您可以使用 Package explorerNavigator 视图查看 .java.class 文件。
猜你喜欢
  • 1970-01-01
  • 2013-06-25
  • 2019-01-19
  • 2018-11-29
  • 2020-04-02
  • 2012-07-03
  • 1970-01-01
  • 2018-06-27
  • 1970-01-01
相关资源
最近更新 更多