JVM中的系统属性System.getProperties()和环境变量System.getenv()有什么区别?
JVM中的系统属性System.getProperties()和环境变量System.getenv()有什么区别?
Answers:
我认为两者之间的区别归结为访问。系统环境变量可通过任何进程访问,而Java系统属性仅可通过将它们添加到的进程访问。
另外,正如Bohemian所说,env变量是在OS中设置的(但是可以通过Java进行设置),而系统属性则作为命令行选项传递或通过设置setProperty()
。
使用-Dpropertyname=value
语法在Java命令行上设置系统属性。也可以使用System.setProperty(String key, String value)
或通过各种
System.getProperties().load()
方法在运行时添加它们。
要获取特定的系统属性,可以使用System.getProperty(String key)
或System.getProperty(String key, String def)
。
环境变量是在OS(例如Linuxexport HOME=/Users/myusername
或WindowsSET WINDIR=C:\Windows
等)中设置的,与属性不同,环境变量可能无法在运行时设置。
要获取特定的环境变量,可以使用System.getenv(String name)
。
System.grtProperties()
列出所有属性,并且在命令行中设置的属性将在那里,但是如果您要这样,则无法将其与系统添加的其他属性区分开。
JAVA_TOOL_OPTIONS
。
System.getenv(String name)
不会在调用时从系统动态读取值。