1

我正在 Mac 上使用Sublime Text创建一个简单的文本编辑器程序,当我通过命令行编译时,它会生成 6 个.class文件。

我在终端中使用以下命令来编译我的类。

javac Notepad.java

控制台日志如下图所示...

控制台日志

有谁知道为什么它会产生多个.class文件?奇怪的是我可以删除它们然后使用java Notepad它仍然可以完美运行......为什么Java甚至创建这些?我确定我在做一些愚蠢的事情。

这里没有发布完整的代码,而是我的git存储库。

4

5 回答 5

9

这些是给内部类的名称——这并不意味着你做错了什么,或者代码有什么问题。

于 2013-07-19T15:00:33.277 回答
1

在您的代码中(第 74 行)有:

new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        new Notepad(true);
    }
}

这是一个匿名类,所以它会出现在另一个.class文件中。我认为你有几个,这就是为什么你有几个文件。您还有其他几个用于保存等。

根据您对@rcook 的评论,我怀疑并非所有功能都正常工作。您可能可以打开,但您可能无法保存等

This previous question解释了名称格式

于 2013-07-19T15:01:24.843 回答
1

每个匿名类(根据内联接口或带有类的@Override)都会根据您提供的定义和接口/类本身编译为自己的 .class 文件。

当到达使用该匿名类的代码块一次或多次时,已编译的类将被实例化。

实例化它的行被编译为一个简单的实例化,并且该类被重用于同一行。

如果内部类 .class 文件被删除,您将在使用它们的行上获得异常和错误。如果未达到这些行,那么您将永远不会收到错误或异常,因为检查是在运行时进行的。

于 2013-07-19T15:03:18.910 回答
0

匿名类创建自己的类文件。有关类似问题,请参见此处为什么具有内部类的 Java 代码会生成第三个 SomeClass$1.class 文件?. 基本上为每个内部类创建单独的类。匿名类是一种内部类。

对于 java 中的内部类,请看这里http://java.sun.com/docs/books/tutorial/java/javaOO/innerclasses.html

于 2013-07-19T15:06:13.203 回答
0

您可能正在创建一些内部类,当您编译类时,内部类文件将编译为 $InnerFile.class

于 2015-11-06T19:01:29.387 回答