【发布时间】:2011-10-26 15:59:25
【问题描述】:
JVM中系统属性System.getProperties()和环境变量System.getenv()有什么区别?
【问题讨论】:
标签: java variables properties system environment
JVM中系统属性System.getProperties()和环境变量System.getenv()有什么区别?
【问题讨论】:
标签: java variables properties system environment
系统属性使用-Dpropertyname=value语法在Java命令行上设置。它们也可以在运行时添加
使用System.setProperty(String key, String value) 或通过各种
System.getProperties().load() 方法。
要获取特定的系统属性,您可以使用System.getProperty(String key) 或System.getProperty(String key, String def)。
环境变量在操作系统中设置,例如在 Linux export HOME=/Users/myusername 或 Windows SET WINDIR=C:\Windows 等中,
并且,与属性不同,可能不在运行时设置。
要获取特定的环境变量,您可以使用System.getenv(String name)。
【讨论】:
java -Dpropname=value 设置属性,我该如何检索这些属性?
System.grtProperties() 列出了所有属性,并且从命令行设置的属性将在那里,但是如果您要问的话,无法将它们与系统添加的其他属性区分开来。
JAVA_TOOL_OPTIONS来设置系统属性。
System.getenv(String name) 不会在调用时从系统中动态读取值。
我认为两者之间的区别归结为访问。环境变量可由任何进程访问,而 Java 系统属性只能由它们添加到的进程访问。
正如 Bohemian 所说,环境变量是在操作系统中设置的(但是它们“可以”通过 Java 设置),系统属性作为命令行选项传递或通过setProperty() 设置。
【讨论】: