在java -D中D代表什么?

sep*_*err 34 java properties

什么是D in

-Dproperty=value
Run Code Online (Sandbox Code Playgroud)

设置系统属性值.

在的Java应用程序启动立场?出于某种原因,它一直困扰着我,为什么D?

Jon*_*eet 38

我一直认为它是定义属性的值......可能是C编译器的遗留物,它通常-D#define代码中的类似.

编辑:目前我最接近此源的是一些JDK 1.1文档,它将标志指定为:

重新定义属性值.propertyName是要更改其值的属性的名称,newValue是要将其更改为的值.[...]

至少包含"redefine"这个词接近"define":)


axt*_*avt 16

在C/C++编译器中,类似的语法用于从命令行定义预处理器宏:

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

.

gcc hello.c -DGREETING="\"Hello, world\""
Run Code Online (Sandbox Code Playgroud)

Java没有预处理器,但定义的属性-D因类似原因而被使用 - 传递一些有关当前环境的特定于程序的信息.唯一的区别是在Java中我们在运行时传递它们,而不是在编译时:

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

.

java -Dgreeting="Hello, world" Hello
Run Code Online (Sandbox Code Playgroud)

我认为这种相似性是类似语法的来源.

  • 感谢C / C ++的详细信息,从那里继承了-D很有道理。 (2认同)

Nel*_*son 9

原因是D代表DEFINE,因为该命令切换所做的是定义变量.