【发布时间】:2018-08-20 17:16:49
【问题描述】:
【问题讨论】:
-
前段时间,我在Introduction to Java — Simplified 上写了一篇文章,提供了一个类似的示例以及它是如何工作的。
【问题讨论】:
$ java Example.java data.txt
或(#!):
$ ./example data.txt
工作示例here。
考虑一个单文件程序来打印文件中的行:
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
【讨论】:
虽然answer by you 包含正确的信息。只是想把它更简单地说,一个文件可以简单地使用从 JDK11 开始的java 执行,例如在 MacOS 上
.../jdk-11.jdk/Contents/Home/bin/java Sample.java
这将寻找并执行标准的 public static void main(String[] args) 方法。可以注意到(即使是初学者)这种方法接受 String 类型的 args,因此放置在原始命令行中源文件的名称之后的参数将传递给编译的类执行时。因此下面的命令
.../jdk-11.jdk/Contents/Home/bin/java <file-name>.java arg1 arg2
将在执行阶段提供字符串参数arg1、arg2。
旁注 - 如果文件包含多个具有标准主方法的类,则在源文件中找到的第一个顶级类应包含标准的声明public static void main(String[])方法被执行。
【讨论】: