学过Java的都知道如何使用 javac 编译器将 Java 程序编译为字节码,然后使用 Java 启动器 java 运行生成的 class 文件。自 Java 诞生以来,一直采用这种方式编译和运行 Java 程序,这也是我们在开发应用程序时将使用的方法。
不过,从 JDK 11 开始,对于某些类型的简单 Java 程序,可以直接从源文件编译和运行,而无需先调用 javac,也可以称为源文件启动功能。要实现这一点,只需将带有 java 文件扩展名的源文件名称传递给 java 即可。这会使 java 自动调用编译器并执行程序。
比如,有一个Java文件命名为HelloWorld.java,在其所在目录下打开命令行并执行以下命令会自动编译并运行该程序:
java HelloWorld.java
在这种情况下,HelloWorld 类会一步完成编译和运行而无需使用 javac。但请注意,这样运行不会创建 class 文件,编译是在后台完成的。因此,若要重新运行程序,必须再次执行源文件。
源文件启动功能的一个用途是方便在脚本文件中使用 Java 程序。对于短小的一次性程序,它也很有用。在某些情况下,它可以让运行简单的示例程序变得稍微容易一些,但它并非 Java 正常编译/执行过程的通用替代品。
尽管直接从源文件启动 Java 程序的新能力颇具吸引力,但它也存在一些限制:
首先,整个程序必须包含在一个源文件中。然而,大多数实际程序会使用多个源文件。
其次,它总是会执行文件中找到的第一个类,并且该类必须包含 main() 方法。如果文件中的第一个类不包含 main() 方法,启动将会失败。这意味着开发人员必须严格遵循代码的组织方式,即使更愿意以其他方式组织它。
第三,由于不会创建class 文件,使用 Java 运行单文件程序不会生成可被其他程序复用的类文件。由于这些限制,使用 Java 运行单文件源程序可能有用,但它本质上是一种特殊情况下的技术。
1047

被折叠的 条评论
为什么被折叠?



