根本原因是系统找不到java.exe,需四步解决:一、确认java_home指向jdk21根目录且路径无空格中文;二、path中新增%java_home%\bin并置顶;三、关闭所有终端后新开cmd验证echo %java_home%和echo %path%;四、用where java检查调用路径是否唯一正确。

装完 JDK 21 却在命令行输 java -version 提示“不是内部或外部命令”,根本原因只有一个:系统找不到 java.exe。这不是 JDK 没装好,而是环境变量没走通。下面这四步做完,99% 的情况都能解决。
第一步:确认 JAVA_HOME 路径写对了
打开“系统属性 → 高级 → 环境变量”,在“系统变量”里检查 JAVA_HOME:
- 变量值必须是 JDK 21 的根目录(比如
C:\jdk-21或D:\Java\jdk-21),不能带\bin,也不能以反斜杠结尾 - 路径里不能有中文、空格、括号;像
C:\Program Files\Java\jdk-21这种默认路径极易失败,建议重装到C:\jdk21这类纯英文无空格路径 - 进到这个目录里,确认里面真有
bin文件夹,且bin\java.exe文件存在
第二步:Path 里必须加 %JAVA_HOME%\bin,且放前面
在同一个“系统变量”区域找到 Path,双击编辑:
- 点击【新建】,输入:
%JAVA_HOME%\bin(注意是百分号,不是引号,也不是绝对路径) - 把这个新条目拖到 Path 列表最顶部——因为 Windows 是从上往下找的,如果有旧 JDK 的路径(比如 jdk8\bin)排在前面,就会优先用它,哪怕你已经卸载了
- 删掉 Path 中所有其他 JDK 相关的硬编码路径(如
C:\Program Files\Java\jdk8\bin),只留这一条动态引用
第三步:关掉所有终端,重开一个干净的 CMD
环境变量改完后,已打开的 CMD、PowerShell、IDE 内置终端都不会自动刷新:
- 手动关闭所有命令行窗口
- 按
Win + R→ 输入cmd→ 回车,打开一个全新的命令提示符 - 先运行:
echo %JAVA_HOME%,看输出是否和你设置的一致 - 再运行:
echo %PATH%,快速扫一眼,确认%JAVA_HOME%\bin对应的真实路径确实出现在最前面
第四步:用 where java 定位到底调用了哪个 java
如果前几步都对,但 java -version 还报错,就用这条命令挖根子:
- 在新打开的 CMD 中执行:
where java - 正常应该只返回一行,类似:
C:\jdk21\bin\java.exe - 如果返回多行,说明系统里还有别的
java.exe(比如 Android SDK、旧 JDK、甚至某些软件自带的 JRE),它们干扰了调用顺序 - 如果一行都不返回,说明
%JAVA_HOME%\bin根本没生效,回头重点查第一步和第二步 - 如果返回的是错误路径(比如指向
C:\Windows\System32\java.exe),那是系统自带的伪命令,得把它从 Path 中删掉或移到后面
做完这四步,java -version 和 javac -version 都能正常输出版本号,就说明彻底通了。CLASSPATH 不用配,JDK 21 完全不需要。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











