2013-03-27 78 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

相關問題