旧CMD不认新环境变量是因为Windows在进程启动时快照环境变量,已运行的CMD环境块固定不变;需关闭旧窗口、新开CMD并验证echo %JAVA_HOME%、where java和java -version。

不用重启电脑,但必须关掉当前 CMD 窗口,再开一个新的。
为什么旧 CMD 不认新环境变量
Windows 的环境变量是进程启动时“快照”下来的。CMD 启动后,它的环境块就固定了,系统不会往里注入新值。改完系统属性里的 JAVA_HOME 或 PATH,只影响之后新建的进程,不影响已打开的 CMD。
哪怕你点“确定”保存了,旧窗口里的 echo %JAVA_HOME% 还是老值,where java 找到的也还是旧路径。
正确刷新 CMD 的操作步骤
- 关闭所有正在运行的 CMD 和 PowerShell 窗口(包括最小化的)
- 重新按 Win+R → 输入 cmd → 回车,打开全新窗口
- 运行 echo %JAVA_HOME% 确认路径是否正确
- 运行 where java 查看实际调用的是哪个 java.exe
- 最后执行 java -version 验证功能
特别注意 VS Code 和其他终端
VS Code 内置终端不是独立启动的,它继承自 VS Code 启动时的环境。如果你改完变量后没关 VS Code,只是重启终端,它依然读不到新值。
立即学习“Java免费学习笔记(深入)”;
必须:完全退出 VS Code(右上角 × 关闭全部窗口),再重新打开,内置终端才会加载最新环境。
避免 PATH 中的隐藏陷阱
有时 where java 显示多个结果,排在第一行的才是实际被调用的。如果它指向旧 JDK 或 Oracle 自带的 javapath,说明你的 %JAVA_HOME%\bin 没排在 PATH 前面。
解决方法:
- 进“系统属性 → 高级 → 环境变量”,找到 Path 编辑界面
- 把 %JAVA_HOME%\bin 这一项拖到最顶部
- 删掉其他显式的 JDK bin 路径(比如 C:\Program Files\Java\jdk1.8.0_291\bin)
- 确保没有多余空格或中文路径干扰


















