先确认 javac 和 java 命令可用且版本完全一致;再编译运行 HelloWorld.java 验证环境;清空 CLASSPATH 排查干扰;检查 java.home 和模块列表确保运行时正确;避免混用不同 JDK 版本。

检查 javac 和 java 是否可用且版本一致
很多问题其实不是代码写错了,而是环境没配对。先确认两个命令都能调用,且来自同一 JDK:
- 运行
javac -version和java -version,输出的版本号必须完全一致(比如都是17.0.1,不能一个是17、一个是21) - 如果提示
command not found或'javac' is not recognized,说明JDK未安装,或PATH没指向JDK/bin目录(不是JRE的bin) - Windows 下常见错误是只配置了
JAVA_HOME,但没把%JAVA_HOME%\bin加进PATH;macOS/Linux 忘了export PATH=$JAVA_HOME/bin:$PATH
编译并运行一个最小可验证类(HelloWorld.java)
别跳过这步——它能同时暴露路径、编码、权限、JDK 版本兼容性等多层问题。
- 新建文件
HelloWorld.java,内容仅含最简结构:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("OK");
}
}
- 在该文件所在目录执行:
javac HelloWorld.java→ 应无任何输出(成功则生成HelloWorld.class) - 再执行:
java HelloWorld(注意:不带.class后缀,且类名首字母大写)→ 输出OK - 若报错
UnsupportedClassVersionError,说明javac编译目标版本高于java运行时支持版本(例如用 JDK 21 编译,却用 JRE 8 运行)
验证 CLASSPATH 是否干扰正常运行
绝大多数情况下你不需要手动设置 CLASSPATH。设了反而容易出问题。
- 临时清空它再试:
unset CLASSPATH(Linux/macOS)或set CLASSPATH=(Windows) - 如果清空后
java HelloWorld成功,但原来失败,说明旧CLASSPATH里混入了旧版rt.jar、冲突的.jar或错误路径 - 特别注意 IDE(如 IntelliJ)有时会自动注入
CLASSPATH,导致终端行为和 IDE 不一致——环境检查务必在纯终端中进行
检查 java 命令是否加载了正确的 rt.jar 或模块
Java 9+ 使用模块系统,传统 rt.jar 已不存在,但错误的 --module-path 或残留 -Xbootclasspath 仍会导致类加载失败。
立即学习“Java免费学习笔记(深入)”;
- 运行:
java -XshowSettings:properties -version 2>&1 | grep -i "java.home\|java.version"(Linux/macOS),确认java.home指向你期望的 JDK 根目录 - 运行:
java --list-modules | head -5,应能列出基础模块(如java.base、java.logging),否则说明运行时损坏或被篡改 - 避免在环境变量中设置
-Xbootclasspath或-Djava.ext.dirs,它们会绕过标准模块加载机制,极难排查
java -version 显示的是系统自带的 OpenJDK 11,而 javac 却来自另一个手动安装的 JDK 21 ——这种“混搭”不会报错,但编译出的字节码在运行时直接崩溃。










