Java 11可以直接运行源代码


从JDK 10开始,java可以在命令行启动的三种方式:运行带有public static void main(String args)方法的类;运行JAR文件的main类,或启动模块的main类。
从Java 11开始,增加一个新的第四种模式:启动在源文件中声明的类:

java HelloWorld.java

上面一行可以直接运行启动Java源码文件,等同于:

javac -d <memory> HelloWorld.java
java -cp <memory> helloWorld


在这种直接运行源文件模式下,执行过程如下:

  • 在源文件中找到要执行的类是第一个顶级类。它必须包含标准public static void main(String)方法的声明 。
  • 已编译的类由自定义类加载器加载,该加载器委托给应用程序类加载器。(这意味着出现在应用程序类路径上的类不能引用源文件中声明的任何类。)
  • 已编译的类在未命名的模块的上下文中执行,似乎是--add-modules=ALL-DEFAULT是有效的(除了--add-module可能已在命令行上指定的任何其他 选项。)
  • 出现在命令行上的文件名后面的任何参数都以main明显的方式传递给标准方法。
  • 如果应用程序类路径上有一个类,其名称与要执行的类的名称相同,则会出错。