java - 环境变量和系统属性之间的区别

标签 java

我使用以下链接来了解环境变量和系统属性。

https://docs.oracle.com/javase/tutorial/essential/environment/env.html

该链接表示环境变量由操作系统设置并传递给应用程序。 当我使用 System.getenv() 获取环境变量时,它向我显示了许多我从未设置过的属性。 所以它一定是操作系统(我使用的是 macOS)设置了这些属性。 System.getenv() 中的一些属性为 MAVEN_CMD_LINE_ARGSJAVA_MAIN_CLASS_1420JAVA_MAIN_CLASS_1430

我的问题是为什么操作系统要在环境变量中设置 java 特定属性?理想情况下,这些应该由 JVM 设置(在 System.properties() 中)。

P.S.:从我在网上读到的内容来看,我了解到环境变量是由操作系统设置的,而 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程序相同,但可以通过调用 environment() 为新Java程序进行修改。构建器的方法。

关于java - 环境变量和系统属性之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60925254/

相关文章:

if 字符串包含语句中的 Java OR 运算符

java - 数组和类的空指针异常 - Java

java - JavaScript 更改 dom 后,Wicket AJAX 不响应

java - 在java中循环语句以获得不同的结果

java - 我们如何在函数外部使用参数变量而不将其存储到另一个变量中?

java - break 不能在循环或 switch 之外使用

java - 使用 AmazonRDSClientBuilder 通过 java 客户端连接到 Amazon RDS

java - 从 Firebase 存储 + ContentResolver 下载(API >= 29)

java - 由于某种原因,我的 split() 在我的代码的一行中工作,但在另一行中不工作

java - 如何从 Gradle 调用自定义 Java 方法