根本原因是PATH中存在多个Java路径且顺序错误,系统优先调用第一个匹配项;需删除所有硬编码Java路径,仅保留并置顶%JAVA_HOME%\bin,再重启终端验证java -version、javac -version及where java输出一致。

Windows 11中执行java -version却调用到旧版JDK或报“不是内部或外部命令”,根本原因往往是Path列表里存在多个Java路径,系统按从上到下顺序匹配,第一个命中即生效——哪怕它指向已卸载的JDK、JRE目录或错误的bin子路径。
确认当前实际生效的Java路径
打开全新的CMD(务必关闭所有旧窗口),运行:
where java
看第一行输出。如果显示的是C:\Program Files (x86)\Common Files\Oracle\Java\javapath\java.exe或类似非JDK安装路径,说明Oracle安装器或旧版JRE偷偷往Path里塞了代理路径,它正挡在你配置的%JAVA_HOME%\bin前面。
再运行:
where javac
若无输出,或输出路径与where java不一致,证明PATH只加了JRE没加JDK,或者%JAVA_HOME%\bin根本没生效。
清理Path中所有硬编码Java路径
右键“此电脑”→“属性”→“高级系统设置”→“环境变量”→在“系统变量”中找到Path→点击“编辑”。
逐行检查,删除所有形如以下的**绝对路径条目**:
• C:\Program Files\Java\jdk1.8.0_361\bin
• C:\Program Files (x86)\Java\jre1.8.0_301\bin
• C:\Program Files\Common Files\Oracle\Java\javapath
【关键提醒】这些路径一旦存在,就会优先于%JAVA_HOME%\bin被系统读取,改JAVA_HOME也无效。
删完后,确保列表里只剩一条Java相关路径:
%JAVA_HOME%\bin
重置JAVA_HOME并置顶%JAVA_HOME%\bin
第一步:在“系统变量”中确认JAVA_HOME已存在,且值为JDK根目录(例如C:\jdk\jdk21),不能带\bin后缀。
第二步:回到Path编辑界面,找到%JAVA_HOME%\bin这一项,用鼠标选中→点击“上移”按钮,直到它排在Path列表的最顶端。
第三步:点击“确定”保存所有修改,连点三次“确定”退出环境变量窗口。
验证是否修复成功
关闭所有CMD/PowerShell/IDE窗口,重新打开一个CMD。
依次执行:
echo %JAVA_HOME% → 应输出你设定的JDK根路径
java -version → 显示版本号必须与该JDK一致
javac -version → 必须有输出,且版本号与java -version完全相同
最后运行:
where java
第一行输出应为:C:\jdk\jdk21\bin\java.exe(路径需与%JAVA_HOME%值严格对应)

















