使用命令行

时间:2015-07-03 16:34:16

标签: java command-line jvm-arguments system-properties

在阅读java man页面时,我发现了-Dproperty=value标志,通过传递此标志,它将创建一个值为value的系统属性。 我写了一个测试java代码:

class File{
    public static void main(String[] args){
        System.out.println("HOLA");
        System.out.println(System.getProperty("blah"));
    }
}

我用javac File.java编译了它,然后使用命令java File -Dblah=blah运行,但我得到了以下输出

HOLA
null

然后我以java -Dblah=blah File运行,然后我得到了预期的输出:

HOLA
blah

问题是:这是一个错误还是故意行为。这似乎是一个错误,因为在大多数程序中,命令在命令行中并不重要。

2 个答案:

答案 0 :(得分:6)

-D需要在类名之前,因为在类名之后的任何都被视为Java应用程序本身的参数...并且Java应用程序可以选择使用-D或任何其他JVM选项执行任何喜欢的操作。

基本上,语法是:

java [jvm-args] class-name [application-args]

答案 1 :(得分:6)

系统属性(以及类路径等其他选项)需要在程序参数之前传递。请参阅usage page

java [ options ] class [ arguments ]