问题描述
我正在启动Java,并且正在阅读Oracle的"Hello World!" for Microsoft Windows指南。在指南中,它告诉您使用javac编译成.class,然后使用
运行java -cp . HelloWorldApp
当我尝试运行它时,我没有运行正确的文件,而是意外地运行了
java helloworldapp.java
在我注意到这一点之后,我尝试了原始方式,并且都将其打印
Hello World!
这让我开始思考,将其作为已编译的.class与原始源代码.java进行运行有什么区别?
解决方法
在Java 11中,现在大多数情况下可以运行“ java
在幕后,它首先是编译源文件,然后运行已编译的类。对于更简单的用例(例如:1个文件Java程序,没有依赖项),其行为可能是相同的,但是值得注意的是,这通常并不意味着“先编译后执行”。
,将其作为已编译.class
运行与原始源代码.java
之间几乎没有区别。
但是,直接运行.java
源文件的功能是一种方便,并且有以下限制:
-
最严重的限制是它仅支持单源程序。如果您在多个源文件中包含类,则无法使用此功能。
-
仅对指定编译器选项提供有限支持。为了更高级的使用,您需要直接调用编译器。
-
重新运行程序需要重新编译源代码,因此启动程序会慢一些。
但是,除了那些限制之外,除了只需要运行一个命令的便利之外,实际上没有什么区别。
当然,由于您应该使用 IDE 开发Java程序,所以这实际上没有关系。这意味着该功能恢复为JEP 330: Launch Single-File Source-Code Programs中指定的原始用途,即运行#!
shebang脚本的用途。