4

我有一个在 Eclipse 中运行的 Java 项目,其主要可执行文件名为GreatPlaces.java. 在我的/bin文件夹中,我假设只有一个名为GreatPlaces.class. 但是,我有几个,除了GreatPlaces.class我也有GreatPlaces$1.classGreatPlaces$2.class...。GreatPlaces$22.class谁能给我解释一下?谢谢。

4

3 回答 3

4

编译器将美元符号用于内部类。

$符号代表内部类。如果它有一个numberafter$那么它是一个匿名的内部类。如果它有一个nameafter$那么它只是一个内部类。

所以在你的情况下,这些代表匿名内部类

于 2013-06-02T17:32:02.430 回答
4

如果您的类中存在任何内部类,则将对其进行编译,并且类文件将是ClassName$InnerClassName. 如果是匿名内部类,它将显示为数字。

例子:

public class TestInnerOuterClass {
    class TestInnerChild{

    }

    Serializable annoymousTest = new Serializable() {
    };
}

将生成的类是:

  1. TestInnerOuterClass.class
  2. TestInnerOuterClass$TestInnerChild.class
  3. TestInnerOuterCasss$1.class
于 2013-06-02T17:32:08.913 回答
2

这些类文件对应于您在程序中使用的匿名内部类。

这是一个事件处理程序的示例,它将被编译成它自己的 .class 文件:

button.addActionLister(new ActionListener() {
    public void actionPerformed(ActionEvent e) { .... }
});
于 2013-06-02T17:34:04.157 回答