代码之家  ›  专栏  ›  技术社区  ›  mrbela

从命令行运行Java与文件结束和不使用的区别

  •  2
  • mrbela  · 技术社区  · 7 年前

    我刚写了一个简单的你好世界班 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
    

    不创建 Helo.C类 先文件! 这也不会形成一个自己的类文件。

    所以现在,我问自己,当我刚跑步时到底发生了什么 java Hello.java ?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Basil Bourque    7 年前

    DR

    JEP 330 在中描述此新功能 OpenJDK 11岁以后,在哪里 java MyClass.java 将编译并运行源代码的单个文件。

    爪哇11

    您在Java 11实现中发现了一个新的特性 OpenJDK 11。为了方便,单人间 .java 现在可以编译文件 仅通过调用执行 java 在命令行上。

    这个 爪哇 自动呼叫 javac 进行编译。然后运行生成的编译类。

    JEP 330: Launch Single-File Source-Code Programs . 引用那个犹太人的话:

    单文件程序——即整个程序适合单个源文件——在学习Java的早期阶段以及编写小型实用程序时是常见的。在这种情况下,在运行程序之前必须编译它是纯粹的仪式。此外,一个源文件可以编译成多个类文件,这就增加了打包开销,从而实现了“运行这个程序”的简单目标。希望能够用Java发射器直接从源运行程序:

    java HelloWorld.java

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


    Java实现 从OpenJDK源代码构建的可能包括也可能不包括这样的功能。这就是 JEP ( OpenJDK 只有一个和一个 JSR (定义在 Java specifications )

        2
  •  2
  •   Murat Karagöz    7 年前

    使用JDK 11,您可以启动 Single-File Source-Code Programs 和翻译一起。如果目录中分散了多个文件,这将不起作用。