我发现只有当我将-Dcontext=web
放入VM参数中时,才能通过System.getproperty
方法读取该值。我想知道这两者之间的区别是什么?
程序参数是传递给你的程序并在主方法的args
数组中可用的参数。
public static void main(String[] args)
VM参数会传递给虚拟机并指示虚拟机执行某些操作。您可以控制堆大小等操作。可以通过调用System.getProperty()
方法从程序中访问它们,就像您所描述的那样。
程序参数:程序参数是传递给您的应用程序的参数,可以通过 main 方法的“args”字符串数组参数访问。
虚拟机参数:虚拟机参数是 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
程序参数放入main()方法中:
public static void main(String[] args) // here
main(String args[])
方法中的args []
获得。
-Djava.library.path=/path/to/folder/
的微妙之处。尽管System.getProperty("java.library.path")
返回包含本地库所在位置/path/to/folder/
的字符串,但System.loadLibrary()
无法链接本地库。例如,在Eclipse IDE中,您必须在IDE菜单设置中特别设置此文件夹位置的值。通过System.setProperty()
以编程方式设置它将不起作用。 - daparic