2015-07-03 69 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]