【发布时间】:2012-09-13 04:18:41
【问题描述】:
【问题讨论】:
标签: java properties
【问题讨论】:
标签: java properties
在 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
我认为这种相似性是相似语法的来源。
【讨论】:
我一直认为它是定义属性的值...可能是 C 编译器的遗留物,它经常在代码中使用 -D 与 #define 类似。
编辑:目前我最接近的来源是some JDK 1.1 documentation,它将标志指定为:
重新定义属性值。 propertyName 是您要更改其值的属性的名称,而 newValue 是要将其更改为的值。 [...]
至少包含接近“定义”的“重新定义”一词:)
【讨论】:
java -Dmydir="some string" SomeClass@ 的一部分987654326@是指哪个类?我使用它来获取外部.properties 文件修改我的程序的某些属性,使用 Spring、Struts2 和 Tomcat 8.5。我的想法是它指的是使用 main 方法的类,但在我的情况下,不存在 main 方法,因为它是一个 Web 应用程序,你能给我解释一下吗?
可能是针对Define,因为您正在定义一个属性
【讨论】:
原因是 D 代表 DEFINE,因为该命令开关所做的是定义变量。
【讨论】: