JEP 330描述了 JDK 11 中用于在 Java 中启动单文件程序的新功能。我试过了:
$ ./Example.java
但它不起作用。正确的用法是什么?
尽管您的答案包含正确的信息。只是想把它用更简单的术语来说,一个文件可以简单地使用java
从 JDK11 开始执行,例如在 MacOS 上
.../jdk-11.jdk/Contents/Home/bin/java Sample.java
这将寻求并执行标准public static void main(String[] args)
方法。可以注意到(即使是初学者)此方法接受args
type String
,因此在原始命令行中源文件名称之后放置的参数在执行时传递给已编译的类。因此以下命令
.../jdk-11.jdk/Contents/Home/bin/java <file-name>.java arg1 arg2
将在执行阶段提供字符串 arguments arg1
。arg2
旁注- 如果文件包含多个具有标准 main 方法的类,则执行在源文件中找到的第一个顶级类,该类应包含标准public static void main(String[])方法的声明。
$ java Example.java data.txt
或(带#!
):
$ ./example data.txt
这里的工作示例。
考虑一个单文件程序来打印文件中的行:
import java.nio.file.*;
import java.util.stream.Stream;
public class ExampleJDK11 {
public static void main(String[] args) throws Exception {
// snip ... print file args[0]
}
}
假设代码在Example.java
并且java
在 上PATH
,那么用法是:
java Example.java data.txt
javac
步骤(!)假设代码在一个文件中,example
顶部有一个“shebang”行:
#!/Users/measter/tools/jdk-11.jdk/Contents/Home/bin/java --source 8
import java.nio.file.*;
import java.util.stream.Stream;
// as above
用法是:
./example data.txt