提问者:小点点

Java汇编的类包含美元符号


我一直使用Eclipse作为我的开发IDE。 我还使用它将我的应用程序导出到一个。jar文件中。 当我在。jar文件中查看我的类时,我的一些类包含了该类的名称,一个美元符号,然后是一个数字。 示例:

  • 查找$1.class
  • 查找$2.class
  • 查找$3.class
  • find.class

我注意到它在更大的类上是这样的。 这是因为类变得这么大,它把它编制成多个类吗? 我已经在多个论坛上搜索了谷歌,搜索了Java的文档,但没有找到任何与之相关的东西。 有人能解释一下吗?


共3个答案

匿名用户

内部类(如果在您的类中存在)将被编译,类文件将是classname$innerclassname。 如遇匿名内类,则以数字形式出现。 类的大小(Java代码)不会导致多个类的生成。

例如。 给定这段代码:

public class TestInnerOuterClass {
    class TestInnerChild{

    }

    Serializable annoymousTest = new Serializable() {
    };
}

将产生的类为:

  1. TestInnerOuterClass.class
  2. TestInnerOuterClass$TestInnerChild.class
  3. TestInnerOuterCass$1.class

更新:

使用匿名类并不被认为是一个不好的实践,它只是取决于使用情况。

在SO上检查此讨论

匿名用户

这是因为在这个更大的类中,你有匿名的类。 它们使用此命名约定进行编译。

查看匿名类难题

匿名用户

除了@mprabhat提出的上述案例之外,其他案例可能是:

  1. 如果您的类包含一个枚举变量,那么也会为此生成一个单独的类。 生成的。class的名称为classname$NAME_OF_ENUM.
  2. 如果您的类X正在继承,即扩展另一个类Y,则将生成一个名为classname$1.class或classname$1$1.class的。class
  3. 如果您的类X正在实现接口Y,那么将生成一个名为classname$1.class或classname$1$1.class的。class.

这些案例是我对JAR中的。class文件进行检查的衍生结果。