先确认是否只安装了JRE而非JDK:java -version成功但javac -version失败,说明缺少javac.exe,需下载完整JDK并正确配置JAVA_HOME与PATH。

javac不是内部命令?先确认是不是JDK装错了
直接输 java -version 能出结果,但 javac -version 报错,大概率不是环境变量问题,而是只装了 JRE(Java 运行时),没装 JDK(Java 开发工具包)。JRE 里只有 java.exe,javac.exe 只存在于 JDK 的 bin 目录下。
检查方法:打开文件资源管理器,去你认为的 JDK 安装路径(比如 C:\Program Files\Java\jdk-1.8),进 bin 文件夹,看有没有 javac.exe。没有?说明装的是 JRE 或安装不完整。
- 去 Eclipse Temurin 或 OpenJDK 官方镜像 下载带 “JDK” 字样的安装包(别选 JRE)
- 安装时勾选 “Add to PATH” 和 “Set JAVA_HOME”(如果安装器提供)
- 避免装到含中文、空格或特殊符号的路径,比如
C:\我的软件\jdk—— 改成C:\Java\jdk-21更稳妥
PATH 里没加 %JAVA_HOME%\bin 就等于没配
很多教程让你手动把 C:\Program Files\Java\jdk-21\bin 粘贴进 PATH,这容易出错:路径带空格、斜杠方向反、版本升级后要全改。正确做法是用 %JAVA_HOME%\bin 这个变量引用。
操作步骤:
立即学习“Java免费学习笔记(深入)”;
- 新建系统变量:
JAVA_HOME,值填 JDK 根目录(不含\bin),例如C:\Java\jdk-21 - 编辑系统变量
Path,新增一行:%JAVA_HOME%\bin - 别碰用户变量里的 PATH,除非你明确知道它和系统变量冲突
验证:echo %JAVA_HOME% 应输出你填的路径;echo %PATH% 应能看到 %JAVA_HOME%\bin 字样(不是展开后的实际路径)。
cmd 窗口不重启,新环境变量永远不生效
改完环境变量,必须关掉所有已打开的 CMD、PowerShell、IDE(如 IntelliJ)、终端模拟器(如 Windows Terminal),再新开一个——否则它还在用旧的 PATH 缓存。
常见误操作:
- 在同一个 CMD 里反复改环境变量、反复输
javac -version—— 没用 - 改完点“确定”就以为好了,没关窗口
- 用 VS Code 内置终端,却没重启整个 VS Code(它缓存 PATH 更顽固)
快速验证:新开 CMD,直接输 where javac。如果返回路径(比如 C:\Java\jdk-21\bin\javac.exe),说明找到了;如果啥也不输出,说明 PATH 还没生效或路径不对。
多个 JDK 共存时,javac 版本对不上怎么办
java -version 和 javac -version 输出版本号不一致,说明 PATH 里混进了不同 JDK 的 bin 目录。Windows 是从左到右扫描 PATH,谁在前面谁优先。
查清楚谁在打架:
-
where java和where javac分别看它们各自指向哪 -
echo %PATH%复制出来,用记事本搜索java,看有几个 JDK 的bin路径
解决办法:
- 删掉 PATH 中多余的 JDK
bin条目,只留一个(推荐用%JAVA_HOME%\bin统一管理) - 如果必须多版本共存,用
set JAVA_HOME=...临时切换,别硬塞进 PATH - IDE(如 Eclipse、IntelliJ)有自己的 JDK 配置项,别依赖系统 PATH —— 它们可能自己找错版本
最易被忽略的点:PATH 里有重复路径、有残留的旧 JDK 条目、或者某条路径末尾多了分号导致解析失败 —— where javac 是唯一可信的验证手段,别信“我刚配好了”这种直觉。



















