系统变量对所有用户、服务进程及IDE后台任务全局生效,用户变量仅限当前登录用户的命令行会话和图形界面程序;单人开发推荐用户变量更安全,团队共用或CI/CD部署必须用系统变量。

系统变量和用户变量对JDK生效范围不同
系统变量影响所有用户,包括新创建的账户、服务进程、IDE后台任务;用户变量只作用于当前登录用户的命令行会话和图形界面程序。如果你是单人开发,用用户变量更安全——改错了不会波及他人或系统服务;如果是团队共用电脑或部署CI/CD代理(比如GitHub Actions runner),必须用系统变量。
配置JAVA_HOME时路径写法必须一致
无论选系统变量还是用户变量,JAVA_HOME值都必须指向JDK根目录(不含\bin),且路径中不能有中文、空格、正斜杠或结尾反斜杠。常见错误:C:\Program Files\Java\jdk-24.0.1\(结尾反斜杠)、C:/Java/jdk-24.0.1(正斜杠)、C:\软件\jdk-24.0.1(中文)。推荐路径:C:\Java\jdk-24.0.1 或 D:\jdk-24.0.1。
Path变量中%JAVA_HOME%\bin顺序决定Java版本优先级
Windows按Path列表从上到下查找可执行文件。如果系统变量和用户变量里都加了Java路径,用户变量的%JAVA_HOME%\bin会覆盖系统变量里的同名项——但仅限当前用户。实际影响体现在:
- cmd/powershell新开窗口:读取用户变量Path(若存在)→ fallback到系统变量Path
- VS Code终端:默认继承用户环境,除非显式配置
"terminal.integrated.env.windows" - IntelliJ IDEA:启动时读取系统变量,但项目运行配置可单独指定JDK
- Windows服务(如Tomcat):只认系统变量,用户变量无效
验证时必须重启终端或重新登录
环境变量修改后,已打开的命令行窗口不会自动刷新。常见误判场景:
- 改完变量后直接在旧cmd里执行
java -version,仍显示旧结果 - 用PowerShell改注册表后没关掉所有PowerShell窗口,
echo $env:JAVA_HOME返回空 - IDEA里点了“Reload project”但没重启IDE,Maven仍报
The JAVA_HOME environment variable is not defined correctly
正确做法:关闭所有终端、IDE、编辑器,再新开一个cmd,运行echo %JAVA_HOME%和where java确认路径来源。

















