使用“ java”编译类时,Java 11不会生成.class文件

问题描述

我已经安装了Java 11。当我运行命令java <filename.java>进行编译和运行代码时,它将编译并运行程序,以CMD显示输出,但不会产生任何.class文件

您能告诉我为什么它不产生.class文件吗?

解决方法

看看JEP 330

自Java 11起,java FileName.java编译并运行FileName.java;但是,编译发生在“幕后”,而没有显式生成相应的.class文件。而是直接将相应的字节码加载到JVM实例中。

动机

单文件程序(整个程序位于单个源文件中)-在学习Java的早期阶段以及编写小型实用程序时很常见。在这种情况下,必须在运行程序之前对其进行编译是纯粹的仪式。此外,单个源文件可能会编译为多个类文件,这给“运行该程序”的简单目标增加了打包开销。希望能够使用Java启动器直接从源代码运行程序:

java HelloWorld.java

如果要将.class文件作为输出,仍应使用javac,如下:

javac FileName.java