命令行参数、JVM参数、环境变量的区别

直接看代码:

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)的方式获取。

你可能感兴趣的:(命令行参数、JVM参数、环境变量的区别)