一个Java文件,但有两个类

我的项目中有一些课程。 编译之后,我找到两个java-Files到每个类:name.class和name $ .class。 可能是什么原因? 我认为课程没什么特别之处。

问候

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

new Runnable() { ... } 

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

  • enum类型也被编译为单独的类文件(因为它们实际上是类)
  • 匿名内部类按顺序编号( MyClass$1.classMyClass$2.class等)
  • unanymous内部类被命名(例如, MyClass$InnerNamedClass.class

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

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

 button.addListener(new PressListener() { public void onPressed(Event event) { System.out.print("test"); } }); 

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