1

我的项目中有几门课。编译后,我为每个类找到了两个 java 文件:name.class 和 name$.class。这可能是什么原因?我看不出这些课程有什么特别之处。

问候

4

4 回答 4

7

它是一个匿名内部类,例如:

new Runnable() { ... }

编辑:评论中的一些有效观点:

  • enum类型也被编译成单独的类文件(因为这些实际上是类)
  • 匿名内部类按顺序编号(MyClass$1.class,MyClass$2.class等)
  • 命名一致的内部类(例如MyClass$InnerNamedClass.class
于 2013-03-27T22:40:01.610 回答
2

您的公共类中有一个内部类(匿名或命名)。这种行为是正常的;Java 编译器将为每个类生成一个 .class 文件,无论源文件中定义了多少类。

于 2013-03-27T22:40:43.930 回答
0

Java compile 为 .java 文件上定义的每个类创建一个 .class 文件。你应该有一个像这样的匿名内部类:

button.addListener(new PressListener() {
    public void onPressed(Event event) {
        System.out.print("test");
    }
});
于 2013-03-27T22:40:46.740 回答
0

Java 中的内部类被编译为Class$InnerClass.

如果您已命名类,则使用类的名称。如果类是匿名的,即你有类似的东西:

final ActionListener actionListener = new ActionListener() {

    public void actionPerformed(ActionEvent e) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
};

然后使用数字,所以这将是Class$1

于 2013-03-27T22:42:34.380 回答