【发布时间】:2021-08-18 09:39:43
【问题描述】:
我发现只有将-Dcontext=web 放入VM 参数时,才能通过System.getproperty 方法读取该值。我想知道这两者有什么区别?
【问题讨论】:
我发现只有将-Dcontext=web 放入VM 参数时,才能通过System.getproperty 方法读取该值。我想知道这两者有什么区别?
【问题讨论】:
程序参数是传递给您的程序的参数,在您的 main 方法的 args 数组中可用
public static void main(String[] args)
VM 参数 被传递给虚拟机,旨在指示 VM 做某事。您可以执行控制堆大小等操作。您的程序可以通过调用System.getProperty() 来访问它们。
【讨论】:
-Djava.library.path=/path/to/folder/ 添加一个微妙的点。 System.loadLibrary() 无法链接本机库,尽管 System.getProperty("java.library.path") 返回您的本机库所在的 /path/to/folder/ 字符串。例如在 Eclipse IDE 中,您必须在 IDE 菜单设置中专门设置此文件夹位置的值。通过System.setProperty() 以编程方式设置它不起作用。
程序参数: 程序参数是传递给您的应用程序的参数,可通过您的 main 方法的“args”字符串数组参数访问。
VM 参数: VM 参数是 JVM 执行程序所需的环境或系统参数。 VM 参数从系统属性中读取,如下 java 指令。
System.getProperty(sysProp1)
代码片段:
public static void main(String[] args) {
String sysProp1 = "sysProp1";
System.out.println("\t System Propery Name:" + sysProp1 + ", Value:" + System.getProperty(sysProp1));
System.out.println("\t Program Variable Test Propery Name:" + args[0]);
}
有两种方法可以传递这两个参数值。
来自 Eclipse:
如上图所示
命令行参数:
java -cp -DsysProp1=testing123456 projectJar-2.0-SNAPSHOT-jar-with-dependencies.jar 123
为了更好的展示,多行
java -cp
-DsysProp1=testing123456
projectJar-2.0-SNAPSHOT-jar-with-dependencies.jar
123
【讨论】:
VM Argument(s) 在 jar 之前并使用 -D 和 Program Argument(s) 在 jar 之后
程序参数进入 main() 方法:
public static void main(String[] args) // here
【讨论】:
程序参数可通过args [] 的main(String args[]) 方法获得
【讨论】:
【讨论】: