繁体   English   中英

从命令行运行Java(带文件结尾和不带文件结尾)之间的区别

[英]Difference between running Java from command line with file ending and without

我刚刚编写了一个简单的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时,究竟会发生什么?

TL;博士

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

Java 11

您已经在基于OpenJDK 11的Java 11实现中发现了一个新功能。为方便起见,现在仅通过在命令行上调用java即可编译执行单个.java文件。

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

请参阅JEP 330:启动单文件源代码程序 引用该JEP:

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

java HelloWorld.java

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


注意: 不是从OpenJDK源代码构建的Java实现可能包含或可能不包含这样的功能。 这就是JEP (仅OpenJDK )和JSR (在Java规范中定义)之间的区别。

使用JDK 11,您可以使用解释器启动“ 单文件源代码程序 ”。 如果目录中分散有多个文件,则此方法将无效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM