system.getenv()是java读取操作系统环境变量的标准方法,返回只读map,需判空、注意大小写敏感性及jvm启动时快照特性,不可修改且依赖部署环境显式透传。

System.getenv() 是 Java 中用来读取操作系统环境变量的静态方法,它返回一个不可修改的 Map<string string></string>,包含当前 JVM 启动时继承的所有环境变量键值对。
获取所有环境变量
调用无参的 System.getenv() 可以一次性获取全部环境变量:
Map<string string> env = System.getenv();
for (String key : env.keySet()) {
System.out.println(key + "=" + env.get(key));
}</string>
注意:返回的 Map 是只读的,尝试修改(如 put、remove)会抛出 UnsupportedOperationException。
获取指定环境变量的值
传入变量名(不区分大小写在 Windows 上,但建议按实际大小写写),直接获取对应值:
-
System.getenv("PATH")—— 获取 PATH 变量(Linux/macOS) -
System.getenv("USERNAME")或System.getenv("USER")—— Windows 和 Linux 常见用户变量 -
System.getenv("HOME")—— Linux/macOS 用户主目录
如果变量不存在,返回 null,使用前建议判空:
String home = System.getenv("HOME");
if (home != null) {
System.out.println("Home dir: " + home);
}
注意启动时机和权限限制
环境变量是在 JVM 启动时从父进程继承的,运行时修改系统环境变量(如在终端中执行 export FOO=bar)不会影响已启动的 Java 进程。
某些环境(如容器、IDE、服务管理器)可能未将全部变量传递给 Java 进程。例如:
- IDE(IntelliJ/Eclipse)需在运行配置中手动添加环境变量
- Docker 容器需用
-e参数或ENV指令显式注入 - Linux systemd 服务默认不继承用户 shell 的环境,需用
Environment=设置
与 System.getProperty 的区别
System.getenv() 读的是操作系统级环境变量;System.getProperty() 读的是 JVM 系统属性(可通过 -Dkey=value 启动参数设置)。两者来源不同,不能混用。例如:
-
System.getenv("JAVA_HOME")→ 系统中设置的 JDK 路径 -
System.getProperty("java.home")→ JVM 实际使用的 JRE 根目录(由 JVM 自动设置)
需要外部配置时优先考虑 System.getenv(),涉及 JVM 内部行为时用 System.getProperty()。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











