我一直在使用Eclipse作为开发IDE。我还使用它将我的应用程序导出到.jar文件。当我查看.jar文件中的类时,我的一些类包含该类的名称,一个美元符号和一个数字。例:
- 查找$ 1.class
- 查找$ 2.class
- 查找$ 3.class
- 查找类
我注意到它是在较大的班级上这样做的。这是因为类太大了,将其编译成多个类吗?我在Google上搜索并浏览了多个论坛,并搜索了Java文档,但没有找到任何相关的内容。有人可以解释吗?
我一直在使用Eclipse作为开发IDE。我还使用它将我的应用程序导出到.jar文件。当我查看.jar文件中的类时,我的一些类包含该类的名称,一个美元符号和一个数字。例:
我注意到它是在较大的班级上这样做的。这是因为类太大了,将其编译成多个类吗?我在Google上搜索并浏览了多个论坛,并搜索了Java文档,但没有找到任何相关的内容。有人可以解释吗?
Answers:
内部类(如果您的类中存在)将被编译,并且类文件将为ClassName$InnerClassName
。如果是匿名内部类,它将显示为数字。类的大小(Java代码)不会导致生成多个类。
例如,给出这段代码:
public class TestInnerOuterClass {
class TestInnerChild{
}
Serializable annoymousTest = new Serializable() {
};
}
将生成的类为:
TestInnerOuterClass.class
TestInnerOuterClass$TestInnerChild.class
TestInnerOuterCasss$1.class
更新:
使用匿名类并不被认为是一种坏习惯,它仅取决于用法。
检查这对SO讨论
除了@mprabhat提出的上述情况外,其他情况还可能是:
这些情况是我对jar中的.class文件进行检查得出的。
要回答您的有关匿名类的评论是不好的。他们绝对不是。考虑一下这可以为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和Callable作为匿名类完成。