2013-03-27 79 views
0

我在我的项目中有几个类。编译后,我发现两个java文件分别为类:name.class和名称$ .class。这可能是什么原因?我对课程没有什么特别的了解。一个Java文件,但两个类

问候

+1

请张贴您的课程定义。 – 2013-03-27 22:38:29

+1

可能重复:http://stackoverflow.com/questions/2147099/why-does-java-generate-multiple-class-files-on-compilation – Sinkingpoint 2013-03-27 22:41:29

+0

编译器将为每个类创建一个类文件...即使有是在同一个.java文件中定义的多个类。 – jahroy 2013-03-27 22:41:52

回答

7

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

new Runnable() { ... } 

编辑:从注释中的一些有效点:

  • enum类型也编译一个单独的类文件(因为这些实际上是类)
  • a不重复的内部类按顺序编号(MyClass$1.classMyClass$2.class等)
  • unanymous内部类被命名(例如, MyClass$InnerNamedClass.class
+0

如果您有多个匿名内部他们将被称为MyClass $,MyClass $ 1,MyClass $ 2等。 – OldCurmudgeon 2013-03-27 23:11:35

+0

感谢您的快速解答。我有两个线程run()。所以它会解释这两个类。 – Salvadora 2013-03-27 23:16:16

2

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

0

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

button.addListener(new PressListener() { 
    public void onPressed(Event event) { 
     System.out.print("test"); 
    } 
}); 
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

相关问题