运行Java程序而不进行编译

时间:2019-02-02 12:25:46

标签: java

最近,我安装了Java11。在编写代码时,我写了Main.java,而不是用javac Main.java来编译java Main.java。它没有显示任何错误,也没有任何问题。为什么会这样呢?这是Java的新版本中的新功能?

Main.java的内容:

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

在Java 8中运行:

java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b16, mixed mode)

java Main.java
Error: Could not find or load main class Main.java

运行在Java中11:

java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

java Main.java
Hello, World!

1 个答案:

答案 0 :(得分:6)

此特征被引入作为JEP 330的一部分:发射单文件源代码程序

  

在源文件模式,其效果是因为如果源文件编译   到存储器中,并在源文件中找到的第一个类被执行。   例如,如果一个名为HelloWorld.java的文件包含一个名为   hello.World,然后输入命令

     

java HelloWorld.java非正式地等同于

     

javac -d HelloWorld.java java -cp hello.World

这是JEP