从命令行运行Java时有文件结尾和没有文件结尾的区别

从命令行运行Java时有文件结尾和没有文件结尾的区别,java,command-line,Java,Command Line,我刚刚写了一个简单的hello世界级,叫做hello: 据我所知,从命令行运行它的正常方式是 1编译并创建文件Hello.class: 2运行它: java Hello 我只是偶然发现,调用 java Hello.java 没有先创建Hello.class文件! 这也不会装入自己的类文件 现在,我在问自己,当我运行java Hello.java时,到底会发生什么;博士 请参阅11及更高版本中的描述,其中java MyClass.java将编译并运行单个源代码文件 爪哇11 您在基于Java

我刚刚写了一个简单的hello世界级,叫做hello:

据我所知,从命令行运行它的正常方式是

1编译并创建文件Hello.class:

2运行它:

java Hello
我只是偶然发现,调用

java Hello.java
没有先创建Hello.class文件! 这也不会装入自己的类文件

现在,我在问自己,当我运行java Hello.java时,到底会发生什么;博士 请参阅11及更高版本中的描述,其中java MyClass.java将编译并运行单个源代码文件

爪哇11 您在基于Java 11的Java 11实现中发现了一个新特性。为了方便起见,现在只需在命令行上调用java即可编译和执行单个.java文件

java自动调用javac进行编译。然后运行生成的编译类

看。引用JEP的话:

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

java HelloWorld.java

而且,是的,这个简单的特性应该在几十年前构建,以帮助无数试图学习Java的初学者


警告:不是从OpenJDK源代码构建的Java实现可能包含也可能不包含这样的功能。这就是only和中定义的之间的区别。

对于JDK 11,您可以使用解释器启动。如果目录中分散了多个文件,这将不起作用。

因为这可能取决于Java版本,您使用的是哪个版本和发行版?你说你可以叫java Hello.java——它运行得像预期的那样吗?
java Hello
java Hello.java