英文:
Java 11 does not produce a .class file when compiling the class with 'java'
问题
我安装了Java 11。当我运行命令 java <filename.java>
时,用于编译和运行代码,它会编译并运行程序,在CMD中显示输出,但不会生成任何 .class
文件。
你能解释一下为什么它不会生成 .class
文件吗?
英文:
I have Java 11 installed. When I run the command java <filename.java>
, for compiling and running the code, it compiles and runs the program, shows the output in CMD, but it doesn't produce any .class
file.
Could you explain to me why it does not produce the .class
file?
答案1
得分: 13
请参阅JEP 330。
自从Java 11版本以来,java FileName.java
命令编译并运行FileName.java
文件;然而,编译过程在“幕后”进行,不会显式生成对应的.class
文件。相反,它会直接将相应的字节码加载到JVM实例中。
动机
> 单文件程序(整个程序适合放在单个源文件中)- 在学习Java的早期阶段以及编写小型实用程序时很常见。在这种情况下,编译程序在运行之前是纯粹的形式主义。此外,单个源文件可能会编译成多个类文件,这为实现“运行此程序”的简单目标增加了打包开销。希望能够通过java启动器直接从源代码运行程序:
java HelloWorld.java
如果您希望将.class
文件作为输出,仍然应该使用javac
,如下所示:
javac FileName.java
英文:
Have a look at JEP 330.
Since Java 11, java FileName.java
compiles and runs FileName.java
; however, compilation happens "behind the scenes", without explicitly producing corresponding .class
file. Instead, it directly loads corresponding byte-code into the JVM instance.
Motivation
>Single-file programs (where the whole program fits in a single source file) - are common in the early stages of learning Java, and when writing small utility programs. In this context, it is pure ceremony to have to compile the program before running it. In addition, a single source file may compile to multiple class files, which adds packaging overhead to the simple goal of "run this program". It is desirable to be able to run the program directly from source with the java launcher:
java HelloWorld.java
If you want to have the .class
file as an output, you should still use javac
, as:
javac FileName.java
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论