2012-09-20 126 views

回答

29

我一直以爲這是定義屬性的值...可能從C編譯器,它經常在代碼中使用-D類似於#define的遺產。

編輯:目前最接近我有一個來源,這是some JDK 1.1 documentation指定的標誌爲:

重新定義屬性值。 propertyName是要更改其值的屬性的名稱,newValue是將其更改爲的值。 [...]

至少包含單詞 「重新定義」,這是接近 「定義」 :)

+0

如果它存在,我會感興趣的是看到這個源代碼。 – kurtzbot

+0

嗨,喬恩,這不是完全相關的這個問題,但我無法在其他地方找到這個信息,我從文檔中讀到:https://docs.oracle.com/javase/7/docs/technotes /tools/windows/java.html'java -Dmydir =「某個字符串」SomeClass「是SomeClass的哪一部分引用的部分?我使用它來使用Spring,Struts2和Tomcat 8.5來獲取外部'.properties'文件修改程序中的某些屬性。我的想法是它使用'main'方法引用類,但在我的情況下,沒有'main'方法存在,因爲它是一個Web應用程序,你能向我解釋嗎? – Frakcool

+0

@Frakcool:是的,這是該流程的切入點。當你運行Tomcat時,你通常不會以這種方式調用它。我建議你問一個新的問題,提供更多關於你的問題的細節。 –

6

原因是d代表DEFINE,因爲那是什麼命令開關確定變量。

2

它可能是Define,原因要定義屬性

12

在C/C++編譯器的類似的語法是用於從命令行定義預處理宏:

#include <stdio.h> 
int main(int argc, char* argv[]) { 
    printf(GREETING); 
    return 0; 
} 

gcc hello.c -DGREETING="\"Hello, world\"" 

Java沒有一個預處理器,但-D定義的屬性給出經常同時使用同樣的理由 - 通過對當前環境的一些具體方案的信息。唯一的區別是,在Java中,我們在運行時通過它們,而不是在編譯時:

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

java -Dgreeting="Hello, world" Hello 

我認爲這種相似性是類似語法的來源。

+0

感謝C/C++的細節,這是有道理的,-D從那裏繼承下來。 – septerr

相關問題