为什么 Java 命令使用 java 文件作为参数

Why is Java command working with java files as parameter

我有 java 文件 HelloWorld.java,代码如下:

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

现在我的理解是,编译和运行这需要两个步骤:步骤1)javac HelloWorld.java步骤2)java HelloWorld。很明显,命令 java 将 class 文件名作为其输入参数。

但是,如果我这样做 java HelloWorld.java,它会打印程序的输出,尽管我传递的是 java 文件名而不是 class 名称。请参阅下面的屏幕截图。

有人可以澄清一下吗?

Java - openjdk version "11.0.8" 2020-07-14 LTS(AWS Corretto)

OS - Amazon Linux 2(red hat based OS)

基础设施 - AWS EC2 instance

编辑:我还注意到只有在相应的 class 文件不在目录中时才会发生这种情况。如果对应的 class 文件存在,它会给出错误:error: class found on application class path: HelloWorld

这是在 java 11.

中引入的

如果安装了JDK,可以直接使用源文件调用javac

java <Class>.java

基本相同
javac <Class>.java
java <Class>

这是 Java 11 中引入的新功能,用于将 java 启动器增强为 运行 作为 Java 源代码的单个文件提供的程序。 有关更多信息,您可以访问 link JEP 330