[英]difference between environment variables and System properties
我使用以下链接了解环境变量和系统属性。
https://docs.oracle.com/javase/tutorial/essential/environment/env.html
该链接说环境变量由操作系统设置并传递给应用程序。 当我使用System.getenv()
获取环境变量时,它向我展示了许多我从未设置过的属性。 所以必须是操作系统(我使用 macOS)设置了这些属性。 System.getenv()
中的一些属性是MAVEN_CMD_LINE_ARGS 、 JAVA_MAIN_CLASS_1420 、 JAVA_MAIN_CLASS_1430 。
我的问题是为什么操作系统要在环境变量中设置 java 特定的属性? 理想情况下,这些应该由 JVM 设置(在System.properties()
)。
PS:从我在网上读到的任何内容我都知道环境变量是由操作系统设置的,而 System.properties() 是由 JVM 设置的
此外,如果有人可以指出我关于环境变量和 System.properties 的一个很好的链接,那将非常有帮助。 我在两者之间很困惑。
环境变量是一个操作系统概念,由启动 Java 程序的程序传递。
这通常是操作系统,例如在资源管理器窗口中双击或在命令提示符下运行命令,这样您就可以获得操作系统管理的环境变量列表。
如果另一个程序启动您的 Java 程序1 ,例如 IDE(Eclipse、IntelliJ、NetBeans 等)或构建工具(Maven、Groovy 等),它可以修改环境变量列表,通常是通过添加更多. 例如,名为MAVEN_CMD_LINE_ARGS
的环境变量往往表明您可能正在使用 Maven 运行您的程序。
在运行的 Java 程序中,不能修改环境变量列表。
系统属性是一个 Java 概念。 JVM 会在启动时自动分配很多系统属性。
您可以使用-D
命令行参数在启动时添加/覆盖这些值。
在运行的 Java 程序中,系统属性列表可以由程序本身修改,尽管这通常是一个坏主意。
1)作为参考,如果一个Java程序要启动另一个Java程序,一般会使用ProcessBuilder
来设置。 新建Java进程的环境变量默认与当前Java程序相同,但可以通过调用builder的environment()
方法为新建Java程序修改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.