java11 允许在一行中编译和执行

java11 allows the compilation and execution in a single line

在名为 filename.java

的文件中
class filename{
public static void main(String[] a){
System.out.println("From filename main method");
}
}

public class ClassName{
public static void main(String[] a){
System.out.println("From First main method");
}
}

遵守以下命令:

命令 1:

C:\javaDJ>java filename.java
From filename main method

命令 2:

C:\javaDJ>javac filename.java
filename.java:7: error: class ClassName is public, should be declared in a file named ClassName.java
public class ClassName{
      ^
1 error

观察:

命令 1 编译(我假设在内部)并成功执行。
命令 2 抛出编译错误。

问题陈述:

当文件 (filename.java) 包含 public class (ClassName) 时,java cmd 如何能够编译名为 filename.java 的文件未命名为 'filename.java'(文件名的名称。)?

使您能够成功执行命令 1 的功能已在 Java11 中引入。该功能允许您执行 Java 源代码文件直接使用 java 解释器。源代码在内存中编译,然后由解释器执行,而不会在磁盘上生成 .class 文件。检查 this 了解更多信息。

您在 命令 2 中遇到的错误从 Java 开始就一直存在。

突出显示 JEP#Launch Single-File Source-Code Programs 中与行为有关的特定部分

In source-file mode, execution proceeds as follows:

  • The class to be executed is the first top-level class found in the source file. It must contain a declaration of the standard public static void main(String[]) method.