一 :Properties 的初始化 initProperties()
System类内部封装了一个Properties对象,其初始化方法由native修饰
在初始化System类时,由虚拟机完成Properties的初始化工作,根据机器以及环境不同,初始化完成后的属性也会不同。
二:设置属性,System.setProperty(String key,String value)
嗯,没啥好说的
这里引申到另一个知识点
VM options : JVM虚拟机启动命令可选项,在这里可以设置一些运行参数等。参数大致可分为标准(-D等)和非标准(-X、-XX)两种,非标准的可选项不保证在所有平台上都实现,并且未来的版本中可能会被修改且不告知,总之就是不稳定(Unstable)。不过有的非标准可选项还是非常有用的。(这里不做详细介绍,参考另一文章)
在设置VM参数时,如果我们需要自定义一些参数信息(这个行为称之为,设置系统属性),则必须使用-Dkey=value这种形式
通过这里设置的参数,JVM在初始化时,会对System中的Properties进行对应赋值,所以我们也可以通过System.getProperty(String key)获取到(仅限-D形式的键值对标准参数可获取,其他格式以及非标准参数无法读取到)。
package packone;
import java.util.Properties;
/**
* @author LiFeng
* @create 2020-10-29 15:29
* @describe
*/
public class TestArg {
public static void main(String[] args) {
Properties properties = System.getProperties();
System.out.println(properties.size());
properties.forEach((a, b) -> System.out.println(a + " >> " + b));
for (String str : args) {
System.out.println(str);
}
}
}
输出结果如下:
-------------------------------------------------------------------------------------------------------------------------------
55
sun.cpu.isalist >> amd64
sun.desktop >> windows
sun.io.unicode.encoding >> UnicodeLittle
sun.cpu.endian >> little
java.vendor.url.bug >> http://bugreport.sun.com/bugreport/
file.separator >> \
java.vendor >> Oracle Corporation
sun.boot.class.path >> C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\classes
java.ext.dirs >> C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext;C:\Windows\Sun\Java\lib\ext
java.version >> 1.8.0_201
java.vm.info >> mixed mode
awt.toolkit >> sun.awt.windows.WToolkit
user.language >> zh
java.specification.vendor >> Oracle Corporation
sun.java.command >> packone.TestArg a b c d
java.home >> C:\Program Files\Java\jdk1.8.0_201\jre
sun.arch.data.model >> 64
java.vm.specification.version >> 1.8
java.class.path >> C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;E:\git\practice\getResource\target\classes;C:\Program Files\JetBrains\IntelliJ IDEA 2019.1\lib\idea_rt.jar
user.name >> Administrator
file.encoding >> UTF-8
java.specification.version >> 1.8
java.awt.printerjob >> sun.awt.windows.WPrinterJob
user.timezone >>
user.home >> C:\Users\Administrator
os.version >> 6.1
sun.management.compiler >> HotSpot 64-Bit Tiered Compilers
java.specification.name >> Java Platform API Specification
java.class.version >> 52.0
java.library.path >> C:\Program Files\Java\jdk1.8.0_201\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Java\jdk1.8.0_201\bin;C:\Program Files\Java\jdk1.8.0_201\jre\bin;C:\Program Files\MySQL\MySQL Server 5.7\bin;C:\Program Files\JetBrains\IntelliJ IDEA 2019.1.1\plugins\maven\lib\maven3\bin;D:\curl-7.64.1\I386;D:\redis\;C:\Program Files\Git\cmd;C:\Program Files\TortoiseGit\bin;C:\Users\Administrator\AppData\Local\GitHubDesktop\bin;.
sun.jnu.encoding >> GBK
os.name >> Windows 7
user.variant >>
java.vm.specification.vendor >> Oracle Corporation
name >> mika
java.io.tmpdir >> C:\Users\ADMINI~1\AppData\Local\Temp\
line.separator >>
java.endorsed.dirs >> C:\Program Files\Java\jdk1.8.0_201\jre\lib\endorsed
os.arch >> amd64
java.awt.graphicsenv >> sun.awt.Win32GraphicsEnvironment
java.runtime.version >> 1.8.0_201-b09
java.vm.specification.name >> Java Virtual Machine Specification
user.dir >> E:\git\practice
user.country >> CN
user.script >>
sun.java.launcher >> SUN_STANDARD
sun.os.patch.level >> Service Pack 1
java.vm.name >> Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg >> sun.io
path.separator >> ;
java.vm.vendor >> Oracle Corporation
java.vendor.url >> http://java.oracle.com/
sun.boot.library.path >> C:\Program Files\Java\jdk1.8.0_201\jre\bin
java.vm.version >> 25.201-b09
java.runtime.name >> Java(TM) SE Runtime Environment
a
b c
d
-------------------------------------------------------------------------------------------------------------------------------
设置方式举个栗子:-D参数名="参数值" 多个参数之间空格分隔
Program arguments:这里设置的值是作为main方法的参数String[] args传入的,用的不多,不做过多解释
多个参数之间用空格分隔,假如参数自身带有空格,则需要用引号包裹
再插入另外一个小知识点,以IDEA为例(eclipse也有),提供了许多常用变量的取值方式。可以省事很多
三:属性获取
System.getProperty(String key)
返回的数值,比如java.version,java.home,os.name,user.home以及user.dir等等,如果Properties初始化完成后,并没有指定对应的key,则返回null
System.getProperty(String key,String def)
获取指定key对应名称的属性值,假如没有的话,返回默认值def
java.version Java 运行时环境版本
java.vendor Java 运行时环境供应商
java.vendor.url Java 供应商的 URL
java.home Java 安装目录
java.vm.specification.version Java 虚拟机规范版本
java.vm.specification.vendor Java 虚拟机规范供应商
java.vm.specification.name Java 虚拟机规范名称
java.vm.version Java 虚拟机实现版本
java.vm.vendor Java 虚拟机实现供应商
java.vm.name Java 虚拟机实现名称
java.specification.version Java 运行时环境规范版本
java.specification.vendor Java 运行时环境规范供应商
java.specification.name Java 运行时环境规范名称
java.class.version Java 类格式版本号
java.class.path Java 类路径
java.library.path 加载库时搜索的路径列表
java.io.tmpdir 默认的临时文件路径
java.compiler 要使用的 JIT 编译器的名称
java.ext.dirs 一个或多个扩展目录的路径
os.name 操作系统的名称
os.arch 操作系统的架构
os.version 操作系统的版本
file.separator 文件分隔符(在 UNIX 系统中是"/")
path.separator 路径分隔符(在 UNIX 系统中是":")
line.separator 行分隔符(在 UNIX 系统中是"/n")
user.name 用户的账户名称
user.home 用户的主目录
user.dir 用户的当前工作目录