我正在 Mac 上使用Sublime Text创建一个简单的文本编辑器程序,当我通过命令行编译时,它会生成 6 个.class
文件。
我在终端中使用以下命令来编译我的类。
javac Notepad.java
控制台日志如下图所示...
有谁知道为什么它会产生多个.class
文件?奇怪的是我可以删除它们然后使用java Notepad
它仍然可以完美运行......为什么Java甚至创建这些?我确定我在做一些愚蠢的事情。
这里没有发布完整的代码,而是我的git存储库。
我正在 Mac 上使用Sublime Text创建一个简单的文本编辑器程序,当我通过命令行编译时,它会生成 6 个.class
文件。
我在终端中使用以下命令来编译我的类。
javac Notepad.java
控制台日志如下图所示...
有谁知道为什么它会产生多个.class
文件?奇怪的是我可以删除它们然后使用java Notepad
它仍然可以完美运行......为什么Java甚至创建这些?我确定我在做一些愚蠢的事情。
这里没有发布完整的代码,而是我的git存储库。
这些是给内部类的名称——这并不意味着你做错了什么,或者代码有什么问题。
在您的代码中(第 74 行)有:
new ActionListener() {
public void actionPerformed(ActionEvent e) {
new Notepad(true);
}
}
这是一个匿名类,所以它会出现在另一个.class文件中。我认为你有几个,这就是为什么你有几个文件。您还有其他几个用于保存等。
根据您对@rcook 的评论,我怀疑并非所有功能都正常工作。您可能可以打开,但您可能无法保存等
This previous question解释了名称格式
每个匿名类(根据内联接口或带有类的@Override)都会根据您提供的定义和接口/类本身编译为自己的 .class 文件。
当到达使用该匿名类的代码块一次或多次时,已编译的类将被实例化。
实例化它的行被编译为一个简单的实例化,并且该类被重用于同一行。
如果内部类 .class 文件被删除,您将在使用它们的行上获得异常和错误。如果未达到这些行,那么您将永远不会收到错误或异常,因为检查是在运行时进行的。
匿名类创建自己的类文件。有关类似问题,请参见此处为什么具有内部类的 Java 代码会生成第三个 SomeClass$1.class 文件?. 基本上为每个内部类创建单独的类。匿名类是一种内部类。
对于 java 中的内部类,请看这里http://java.sun.com/docs/books/tutorial/java/javaOO/innerclasses.html
您可能正在创建一些内部类,当您编译类时,内部类文件将编译为 $InnerFile.class