从命令行运行Java(带文件结尾和不带文件结尾)

时间:2019-01-15 16:43:45

标签: java command-line

我刚刚编写了一个简单的hello世界类,名为Hello

public class Hello {
  public static void main(String[] args) {
    System.out.println("Hello world");
  }
}

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

1)对其进行编译(并创建文件Hello.class):

javac Hello.java

2)运行它:

java Hello

我只是偶然发现,也可以调用

java Hello.java

无需先创建Hello.class文件! 这也不会创建自己的类文件。

现在,我问自己,当我刚运行java Hello.java时会发生什么?

2 个答案:

答案 0 :(得分:2)

tl; dr

请参见JEP 330,在OpenJDK 11及更高版本中描述了此新功能,其中java MyClass.java将编译并运行单个源代码文件。

Java 11

您已经发现在OpenJDK 11上构建的Java 11实现中的新功能。为方便起见,现在可以编译单个.java文件,而仅通过调用{ {1}}。

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

请参见JEP 330: Launch Single-File Source-Code Programs。引用该JEP:

  

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

     

javac

是的,这个简单的功能应该在数十年前构建,可以帮助无数的初学者尝试学习Java。


注意事项:从OpenJDK源代码构建的Java实现 not 可能包含也可能不包含此类功能。这就是JEP(仅OpenJDK)和JSR(在Java specifications中定义)之间的区别。

答案 1 :(得分:2)

使用JDK 11,您可以使用解释器启动Single-File Source-Code Programs。如果目录中分散有多个文件,则此方法将无效。