java -version 和 javac -version 均成功输出版本号,且能编译运行 Hello.java 输出“JDK OK”,才表明 JDK 安装完整、PATH 和 JAVA_HOME 配置正确。

检查 java -version 命令是否可用
这是最直接的验证方式。打开终端(Windows 用 CMD/PowerShell,macOS/Linux 用 Terminal),输入:
java -version
如果输出类似 java version "17.0.1" 2021-10-19 LTS 的信息,说明 java 可执行文件已正确注册到系统 PATH 中;若提示 'java' is not recognized as an internal or external command(Windows)或 command not found: java(macOS/Linux),则 JDK 未被系统识别。
常见原因包括:
-
JAVA_HOME环境变量未设置,或指向了错误路径(如只装了 JRE、或指向了jre/目录而非jdk/根目录) -
PATH中未包含%JAVA_HOME%\bin(Windows)或$JAVA_HOME/bin(macOS/Linux) - 安装时勾选了“Add to PATH”但未重启终端(环境变量变更需新会话生效)
确认 javac 编译器是否存在
java -version 成功只能说明 JRE 运行时存在,不能证明 JDK(含编译器)安装完整。必须单独验证 javac:
立即学习“Java免费学习笔记(深入)”;
javac -version
预期输出如 javac 17.0.1。若报错 “command not found”,说明安装包可能只是 JRE,或 JDK 安装不完整(例如 Oracle JDK 下载页有 “JDK” 和 “JRE” 两个独立安装包,容易选错)。
注意:
- 某些 Linux 发行版(如 Ubuntu)通过
apt install default-jdk安装后,javac才真正可用;仅装default-jre不行 - Mac 用户用 Homebrew 安装 OpenJDK 后,需确认
brew --prefix openjdk路径下的bin/javac是否在PATH中
运行一个最小 Java 程序验证编译与执行链路
光看命令返回不等于能写代码。建一个测试文件,走通从源码 → 字节码 → 运行全流程:
新建 Hello.java:
public class Hello {
public static void main(String[] args) {
System.out.println("JDK OK");
}
}
然后依次执行:
javac Hello.java java Hello
成功输出 JDK OK 才算真正闭环。常见失败点:
-
error: class Hello is public, should be declared in a file named Hello.java→ 文件名大小写/拼写错误(Java 对类名和文件名严格匹配) -
Exception in thread "main" java.lang.NoClassDefFoundError: Hello→ 执行java时误加.class后缀(应写java Hello,不是java Hello.class) -
中文乱码(尤其 Windows 控制台)→ 源文件编码非 UTF-8,或终端未设
chcp 65001,但不影响 JDK 功能本身
检查 JAVA_HOME 是否指向 JDK 根目录而非子目录
很多工具(Maven、Gradle、IDE)依赖 JAVA_HOME,但它必须指向 JDK 安装根路径,例如:
- ✅ 正确:
C:\Program Files\Java\jdk-17.0.1(Windows)、/Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home(macOS)、/usr/lib/jvm/java-17-openjdk-amd64(Ubuntu) - ❌ 错误:
C:\Program Files\Java\jdk-17.0.1\bin(多了\bin)、/usr/lib/jvm/java-17-openjdk-amd64/jre(指向了 jre 子目录)
验证方式(Windows):
echo %JAVA_HOME%
macOS/Linux:
echo $JAVA_HOME
再确认该路径下是否存在 bin/javac 和 lib/tools.jar(JDK 9+ 已移除该 jar,但应有 lib/jrt-fs.jar 或 lib/modules)——这是区分 JDK 与 JRE 的关键依据。
真正容易被忽略的是:IDE(如 IntelliJ)有时会覆盖系统 JAVA_HOME,用自己的嵌入式 JDK 启动,导致终端里查不到,但 IDE 内却能跑。所以务必在纯终端中验证,而不是只信 IDE 的提示。










