如题,谢谢。

解决方案 »

  1.   

    就是键值对。由于有些参数需要变化的,不能写死在程序中,我们就可以采用这种方式在执行命令时设置一些参数。
    这样的话,我们就不用在程序代码中把具体的值给写死。举个例子:
    public class Test {
        
        public static void main(String[] args) {
            String path = System.getProperty("my.property.path");
            String file = System.getProperty("my.property.file");
            System.out.println("path = " + path);
            System.out.println("file = " + file);
        }
    }编译上面的代码之后,使用命令:
    [code=BatchFile]F:\>java -Dmy.property.path=abc -Dmy.property.file=123 Test[/code]程序执行后的结果就是:
    path = abc
    file = 123如果想动态地配置一下,可以把下面这个文件存为一个 .bat 文件:[code=BatchFile]@echo off
    if "%OS%" == "Windows_NT" setlocal
    if "%1" == "" (
      set MY_PROPERTY_PATH=default_value
    ) else (
      set MY_PROPERTY_PATH=%1
    )
    if "%2" == "" (
      set MY_PROPERTY_FILE=default_value
    ) else (
      set MY_PROPERTY_FILE=%2
    )
    java -Dmy.property.path=%MY_PROPERTY_PATH% -Dmy.property.file=%MY_PROPERTY_FILE% Test
    echo on[/code]假设存为 test.bat,如果执行:test 时输出:
        path = default_value
        file = default_valuetest abc 时输出:
        path = abc
        file = default_valuetest abc 123 时输出:
        path = abc
        file = 123如果善于利用这个参数的话,可以很方便地把一些诸如应用程序主要参数采取这种方式进行配置。
      

  2.   

    再举个 Java 系统参数的例子,下面这段代码可以输出本地机器所处时间的当前时间:public class Test {
        
        public static void main(String[] args) {
            System.out.printf("%tF %<tT", System.currentTimeMillis());
        }
    }如果我们不想改动源代码,想把程序中所有的时间都更改为 GMT 标准时间的话,我们也可以利用 -D 这个参数:[code=BatchFile]F:\>java -Duser.timezone=GMT Test[/code]这样的话,就可以获得格林尼治标准时间了,而不是处于操作系统默认的 GMT+8 时区的时间了。如果再执行 java Test 这时还是会输出本地时间的。像 user.timezone 这种是 Java 的系统参数,是由 JVM 启动时设定的,同时可以采用 -D 参数人为地修改他们的值。
    可以使用 System.getProperties() 方法获得所有的 Java 系统参数。Java 系统参数中主要含有一些 Java 运行时所必需的基本参数,比如:Java 版本、引导路径、操作系统版本、
    路径分隔符、系统默认编码、时区、国家、换行符、用户信息、临时文件目录等等参数。像在 1 楼中的那些参数是自定义的,由用户任意设定的。