直接看代码:
public class TestProperty {
public static void main(String[] argv) {
// - 命令行参数
System.out.println(argv[0]);
System.out.println(argv[1]);
// - JVM虚拟机参数
System.out.println(System.getProperty("vm_prop1"));
System.out.println(System.getProperty("vm_prop2"));
// - 环境变量
System.out.println(System.getenv("env_param1"));
}
}
使用以下命令编译、运行上面代码:
export env_param1=myenv
javac TestProperty.java
java -Dvm_prop1=abc -Dvm_prop2=123 TestProperty cmd_arg1 cmd_arg2
输出:
cmd_arg1
cmd_arg2
abc
123
myenv
可以看出:
- 命令行参数是跟在运行的类名后面的位置参数,位置从0开始,在代码中用
argv[N]
的方式获取。 - JVM参数是跟在java命令后以
-D
开头、-Dkey=value
格式的参数,在代码中用System.getProperty(key)
的方式获取。同时也可以用System.setProperty(key, value)
的方式设置参数,作为参数传递的一种方式。 - 环境变量是
export
命令导入的环境变量,对所有进程都生效,在代码中用System.getenv(key)
的方式获取。