最直接方式是运行 java -version,但结果取决于 path 顺序;用 java -xshowsettings:properties -version | grep "java.home" 可查实际路径;java 和 javac 版本可能不一致,需分别验证。

在命令行中快速确认JDK版本
最直接的方式是运行 java -version,它会输出当前 java 命令指向的 JDK 版本(包括 vendor 和构建信息)。但要注意:这个结果取决于 PATH 环境变量中哪个 java 可执行文件排在前面,不一定是你预期的那个 JDK。
如果想确认具体路径,加 -XshowSettings:properties 参数:
java -XshowSettings:properties -version 2>&1 | grep "java.home"
输出类似:java.home = /Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home —— 这才是实际生效的 JDK 安装根目录。
-
java -version显示的是运行时版本,可能和javac不一致(尤其当JAVA_HOME未设或PATH混杂多个 JDK 时) - macOS 上通过
/usr/libexec/java_home -V可列出所有已安装 JDK,并标出当前默认项 - Windows 用户可用
where java查看PATH中第一个匹配位置
在 Java 程序中获取运行时 JDK 版本信息
代码里用 System.getProperty("java.version") 最常用,但它返回的是 JRE 规范版本号(如 "17.0.1"),不是完整构建版本。需要更详细信息时,可补充读取:
立即学习“Java免费学习笔记(深入)”;
-
System.getProperty("java.vendor")—— 如"Eclipse Adoptium"或"Oracle Corporation" -
System.getProperty("java.home")—— 实际运行 JDK 的根路径 -
System.getProperty("java.runtime.version")—— 更精确的构建 ID(如"17.0.1+12-LTS")
注意:从 Java 9 开始,java.version 格式改为语义化版本(如 "17.0.1"),而旧版(8 及以前)是 "1.8.0_351"。若需兼容判断,建议优先解析 java.specification.version(如 "17")。
区分 javac 编译器版本与运行时版本
一个常见误区是认为 java -version 和 javac -version 总是一致。实际上,它们可以来自不同 JDK —— 尤其当 PATH 中 javac 路径靠前,而 java 来自另一个位置时。
- 务必分别执行
java -version和javac -version对比输出 - IDE(如 IntelliJ)可能覆盖
JAVA_HOME或使用内置 JDK,此时终端命令结果 ≠ IDE 内编译/运行环境 - Maven 项目中,
maven.compiler.source和maven.compiler.target只控制字节码级别,不影响实际运行所用的 JDK
检查 JAVA_HOME 是否生效及常见陷阱
JAVA_HOME 是很多工具(如 Tomcat、Gradle、Maven)依赖的环境变量,但它本身**不会自动影响 PATH 中的 java 或 javac** —— 那些命令是否被正确调用,只看 PATH 顺序。
- 设置
JAVA_HOME后,必须确保$JAVA_HOME/bin(Linux/macOS)或%JAVA_HOME%\bin(Windows)在PATH中且位置合理 - macOS Catalina 及以后,shell 默认为 zsh,
~/.bash_profile中的设置可能不生效,应改写入~/.zshrc - Docker 容器中常直接指定 OpenJDK 镜像标签(如
eclipse-temurin:17-jre),此时JAVA_HOME通常已预设,但需验证java -version输出是否符合预期
真正决定“当前使用哪个 JDK”的,永远是 PATH 查找顺序 + 实际可执行文件路径。其他方式(IDE 设置、构建工具配置)都只是间接影响这一链条的某一段。










