我一直在使用Eclipse作爲我的開發IDE。我也用它將我的應用程序導出到.jar文件中。當我查看.jar文件中的類時,我的一些類包含該類的名稱,美元符號,然後是數字。例如:java編譯的類包含美元符號
- 查找$ 1.class
- 查找$ 2.class
- 查找$ 3.class
- Find.class
我發現它這樣做的更大類。這是因爲類變得如此之大,它將它編譯成多個類?我搜索了多個論壇,並搜索了Java文檔,但還沒有發現任何與之相關的內容。有人可以解釋嗎?
我一直在使用Eclipse作爲我的開發IDE。我也用它將我的應用程序導出到.jar文件中。當我查看.jar文件中的類時,我的一些類包含該類的名稱,美元符號,然後是數字。例如:java編譯的類包含美元符號
我發現它這樣做的更大類。這是因爲類變得如此之大,它將它編譯成多個類?我搜索了多個論壇,並搜索了Java文檔,但還沒有發現任何與之相關的內容。有人可以解釋嗎?
內部類將被編譯,類文件將爲ClassName$InnerClassName
。在Anonymous內部類的情況下,它將顯示爲數字。類(Java代碼)的大小不會導致生成多個類。
E.g.給定這一段代碼:這將產生
public class TestInnerOuterClass {
class TestInnerChild{
}
Serializable annoymousTest = new Serializable() {
};
}
類將是:
TestInnerOuterClass.class
TestInnerOuterClass$TestInnerChild.class
TestInnerOuterCasss$1.class
更新:
使用匿名類不被認爲是一種不好的做法,它僅取決於使用情況。
檢查this討論,讓
這是因爲你有這樣大的類中的匿名類。他們使用這個命名約定進行編譯。
爲了回答您的評論的都是匿名類壞。他們絕對不是。 認爲這一個動作監聽分配給一個JButton:
JButton button = new JButton(...);
button.addActionListener(new ActionListener() { ... });
或本由「名稱」屬性做一個區分大小寫的排序
Collections.sort(array, new Comparator<Foo>() {
public int compare(Foo f1, Foo f2) {
return f1.getName().toLowerCase().compareTo(f2.getName().toLowerCase());
}
});
您還可以看到很多的Runnable和可作爲匿名課程完成。
除了由@mprabhat提出的上述情況,其他情況下可能是:
這些情況是我對jar中的.class文件的檢查的派生。
我有一個不符合這些標準的類,並且class.getName()仍然是錯誤的 - 對於Group.java,它返回Group _ $$ _ jvst248_20。我不知道發生了什麼事。絕對沒有枚舉,擴展或實現。 – Amalgovinus 2016-04-20 20:12:59
好吧,有一個匿名課程是不好的?我不太明白它是如何工作的。如果我在一個類中創建了一個新的類實例變量,那是一個匿名類? – Frizinator 2012-07-09 03:48:16
不,它有一個匿名類,這取決於用法。更新我的文章 – mprabhat 2012-07-09 03:49:30
包含類體的枚舉將自動生成一個匿名內部類,它擴展了enum類,從而生成另一個帶有$的類文件。 – dlaidlaw 2015-07-07 15:22:17