system.getenv()用于获取操作系统环境变量,返回只读map;可无参获取全部变量或传参获取指定变量,大小写敏感性依操作系统而异,且jvm启动后环境变量修改无效。

在Java中,System.getenv() 是获取操作系统环境变量的标准方式,它返回一个不可修改的 Map<string string></string>,键为环境变量名(如 "PATH"、"HOME"),值为对应字符串。
获取所有环境变量
调用无参的 System.getenv() 可一次性获取当前进程可见的所有环境变量:
Map<string string> env = System.getenv();
for (Map.Entry<string string> entry : env.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}</string></string>
注意:该 Map 是只读的,任何修改操作(如 put)都会抛出 UnsupportedOperationException。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
获取指定环境变量的值
传入变量名字符串即可获取单个变量的值,返回 null 表示该变量未定义:
String javaHome = System.getenv("JAVA_HOME");
if (javaHome != null) {
System.out.println("JAVA_HOME: " + javaHome);
} else {
System.out.println("JAVA_HOME is not set.");
}
大小写敏感性取决于操作系统:Windows 不区分大小写,Linux/macOS 区分。例如在 Linux 上 System.getenv("Path") 会返回 null,而 "PATH" 才有效。
常见注意事项
- 环境变量在 JVM 启动时读取,运行中修改系统环境变量不会影响已启动的 Java 程序
- 某些安全策略(如安全管理器启用时)可能限制访问环境变量,抛出
SecurityException - 容器或 IDE 中运行时,实际继承的是父进程(如 shell 或 IDE 进程)的环境,而非系统全局设置
- 避免硬编码敏感信息(如密码)到环境变量后直接用
getenv读取,应配合配置加密或权限管控
替代方案:从启动参数读取(补充用途)
若需传递配置但不依赖系统环境,可改用 JVM 系统属性:-Dmy.config=value,再通过 System.getProperty("my.config") 获取。这种方式更可控,且支持默认值(System.getProperty("x", "default"))。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










