2015-07-03 46 views
2

在阅读java man页面时,我发现-Dproperty=value标志,通过传递此标志的统计信息,它将创建一个value = value的系统属性。 我写了一个测试Java代码:使用命令行的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 

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

回答

5

系统属性(以及其它选项,如类路径)需要程序参数之前传递。查看usage page

java [ options ] class [ arguments ] 
5

-D需要类的名称之前来,因为任何后的类名被视为一个参数传递给Java应用程序本身...和Java应用程序可以选择做任何它喜欢用-D ,或任何其他JVM选项。

基本上,语法是:

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