如何检查您的 Java 版本(Windows、macOS、Linux):java -version 与 javac -version

目次

1. 本文您将学到的内容(要点概述)

在本页中,我们将整理出实现 “从命令行检查 Java 版本” 目标的最快方法。
先给出结论,您通常会使用以下两个命令:

  • 实际运行的 Java 版本java -version
  • 用于开发的 JDK(编译器)版本javac -version

然而,在真实环境中,常常会出现 “你期待的版本并未显示” 的情况。
本文不仅列出命令,还会解释 为什么会出现不匹配以及如何修复

1.1 阅读完本文后您将能够做到的事

完成后,您将能够:

  • 立即检查您的 Java 版本 wp:list /wp:list
    • 能够自信地使用 java -versionjavac -version 来完成正确的目的
  • 了解在 Windows / macOS / Linux 上如何检查 wp:list /wp:list
    • 在考虑常见的操作系统差异的情况下验证 Java
  • 即使安装了多个版本,也能识别正在使用的 Java wp:list /wp:list
    • 自行排查 “我已经安装了,但仍显示旧版本” 的问题
  • 了解当显示的版本不是预期时的常见原因和解决办法 wp:list /wp:list
    • 学习 PATH、JAVA_HOME 以及版本切换设置的基础知识

1.2 目标读者(欢迎初学者)

  • 您需要使用 Java,并且想首先了解 您的电脑上安装了哪个 Java
  • 您被告知 “需要 Java 17” 或 “只能使用 Java 8”,并且需要 检查当前的版本
  • 您执行了命令,却得到 与预期不同的版本,并且卡住了
  • java 能运行但 javac 不能,并且您对 JRE 与 JDK 的区别 了解不完整

1.3 事先需要了解的关键点(非常重要)

大多数关于检查 Java 版本的困惑都归结于以下一点:

  • “机器上已安装的 Java” 并不等同于 “实际运行的 Java”。

当存在多个 Java 安装时,实际运行的 Java 是在运行时 优先级最高的路径 中找到的那个。这就是为什么 java -version 的结果可能不是 “您刚刚安装的最新版本”。

考虑到这种不匹配,本文将按以下顺序说明:

  • 首先运行什么(最简路径)
  • 接下来检查什么以定位原因(调查步骤)
  • 如何修复(解决步骤)

一步一步。

2. 开始:Java 版本检查命令列表(复制粘贴)

检查 Java 版本并不需要很多命令。
如果您只记住本节内容,就能解决约 90% 的情况

2.1 检查运行时使用的 Java 版本

java -version

此命令显示 当前这台电脑实际运行的 Java 版本
这是确认 Java 环境的最基础、也是最重要的方式。

输出通常包含的内容(示例)

  • Java 版本号(例如 17 / 21 / 1.8 等)
  • 实现方式(OpenJDK / Oracle JDK 等)
  • 运行时环境细节,如 64 位 / Server VM

关键点在于:它针对的是 PATH 中优先级最高的 java。这并不是 “您把 Java 安装在哪里”,而是 “实际被调用的是哪个 Java”。 请牢记这一点。

2.2 检查 Java 开发环境(JDK)版本

javac -version

此命令显示 Java 编译器 (javac) 的版本。

这能告诉您什么

  • JDK 是否已正确安装
  • 您是否不仅能运行应用,还能进行 开发/构建

如果该命令返回类似以下信息:

  • “command not found”
  • javac is not recognized as an internal or external command”

那么很可能 JDK 未安装,或 PATH 设置不正确

2.3 java -versionjavac -version 的区别(常见初学者困惑)

CommandWhat It ChecksMain Use
java -versionJava at runtimeRunning apps / verifying runtime behavior
javac -versionCompiler (JDK)Development / builds

一个常见的误解是:

  • 如果 java -version 能运行,你就可以开发 Java 代码。 这不正确
  • 只运行 → java
  • 开发(编译) → javac

这两者具有不同的角色,因此检查两者是标准做法。

2.4 使用 JDK 工具检查(可选)

根据你的环境,你也可以使用以下命令检查 JDK 版本:

jshell --version
  • jshellJDK 9 及更高版本 默认包含的工具
  • 如果这个能运行,这是一个 JDK 已安装的良好迹象

话虽如此,只要你理解 java -versionjavac -version,通常就足够了

2.5 推荐检查顺序(适合初学者)

如果你是新手,按以下顺序检查可以减少困惑:

  1. java -version → 检查运行时使用的 Java 版本
  2. javac -version → 确认开发 JDK 是否可用
  3. 如果结果不是你预期的,请参阅下一节的操作系统特定检查

3. 如何阅读 java -version(示例输出及其解释)

在本节中,我们将逐步分解运行 java -version 时出现的内容,以便初学者不会迷失方向
这是为了避免常见的“我不知道该看什么”的情况。

3.1 java -version 的基本作用

java -version

这个命令告诉你的当前将运行的 Java 版本
它不会显示已安装的 Java 版本列表——它显示的是实际正在使用的那个

这就是为什么这个结果成为以下情况的基准:

  • 是否满足应用或工具要求的 Java 版本
  • 生产/测试环境是否运行预期的 Java 版本
  • 是否意外使用了较旧的 Java 版本

3.2 典型输出示例(插图)

确切的措辞因环境而异,但你通常会看到类似以下内容:

java version "17.0.8"
Java(TM) SE Runtime Environment (build 17.0.8+9)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.8+9, mixed mode)

在这个输出中,最重要的部分是第一行

3.3 首先检查什么(你只需知道这些)

① 版本号

java version "17.0.8"
  • 17 → Java 17 系列
  • 1.8.x → Java 8
  • 21.x → Java 21

在许多工作场所,LTS(长期支持)版本如 8 / 11 / 17 / 21 很常见。
首先确认它是否是你的项目要求的重大版本

② Java 发行版(Oracle / OpenJDK 等)

Java(TM) SE Runtime Environment

OpenJDK Runtime Environment

在大多数情况下,对于基本验证,你不需要过于严格。
然而,一些公司/项目可能明确要求“Oracle JDK”或“OpenJDK”,因此这取决于你的环境。

③ “64-Bit” / “Server VM”

64-Bit Server VM
  • 在大多数现代环境中,64-Bit 是正常的
  • 除非你有特殊原因,这里快速检查就足够了

3.4 为什么你会得到“与预期不同的 Java 版本”

这是最困惑初学者的点。

一个常见的误解

  • “我安装了最新的 Java。”
  • “所以 java -version 应该显示最新版本。”

实际上,这并不保证。

原因很简单:

  • java -version 运行的是 PATH 中优先级最高的第一个 java

这就是为什么。

换句话说,如果:

  • 较旧的 Java 仍在前面的 PATH 中
  • 多个 JDK/JRE 安装混在一起

那么可能运行的不是你安装的那个 Java

3.5 java -version 检查的是“结果”,而不是“位置”

作为一种重要的思考方式:

  • ❌ Java 安装在哪里
  • ⭕ 实际执行的是哪个 Java

这就是 java -version 的用途。

首先,直接判断显示的结果是否正确。
如果不正确,请使用下面的章节来找出原因并修复——这是最安全的工作流程。

4. 如何读取 javac -version(确认 JDK 是否已安装)

本节将解释 javac -version 的作用以及如何解读它。
快速了解此命令可以解决一个常见问题:“Java 能运行,但我无法开发/构建。”

4.1 什么是 javac?(面向初学者)

javacJava 编译器(Java Compiler)的缩写。

  • java运行 已经编译好的程序
  • javac编译 源代码(.java

因此两者的角色是:

  • 只想 运行 Java → 只需要 java
  • 想要 开发/构建 Java → 必须使用 javac

这就是基本的职责划分。

4.2 从 javac -version 能学到什么

javac -version

此命令显示当前使用的 Java 编译器的版本

示例输出(示意)

javac 17.0.8

这里显示的数字可以视为:

  • JDK 本身的版本
  • 实际编译时使用的 基准 Java 版本

在大多数真实场景下,这样的理解已经足够。

4.3 当它与 java -version 不匹配时的注意事项

这种不匹配在实际工作中经常出现:

  • java -version → 17
  • javac -version → 11

此时,你的环境出现了不匹配的设置

  • 运行时:Java 17
  • 开发时:Java 11

这种不匹配可能导致的问题

  • 不能使用更新的语言特性
  • 构建成功,但运行时出现错误
  • CI 环境与本地环境的行为不一致

因此,作为基本原则,保持两个版本一致是最安全的做法。

4.4 当找不到 javac 时(常见错误)

你可能会看到类似以下的提示:

  • javac 不是内部或外部命令,也不是可运行的程序”
  • “command not found: javac”

在这种情况下,原因几乎总是以下两种之一:

原因 1:未安装 JDK

  • 只安装了 JRE(运行时)
  • 开发工具未随之安装

原因 2:PATH 未设置

  • 已安装 JDK,但 bin 目录未加入 PATH

在各操作系统的确认章节中,你可以可靠地区分这两种情况。

4.5 javac -version 是 “我能开发吗?” 的信号

如果你是初学者,记住下面的对应关系可以避免混淆:

  • java -version我能运行 Java 吗?
  • javac -version我能开发/构建 Java 吗?

只要两个命令都显示预期的版本,
你的 Java 环境就已经满足最基本的搭建要求

5. 如何在 Windows 上检查 Java 版本

本节说明如何在 Windows 上检查 Java 版本,并指出实际使用中常见的坑。
由于 Windows 常常同时存在多个 Java 安装,检查顺序尤为重要。

5.1 使用命令提示符 / PowerShell 检查(基础)

先从最基础的方法入手。

  1. 打开 命令提示符PowerShell
  2. 运行以下命令
    java -version
    

如果你计划进行 Java 开发,还需要检查这个:

javac -version

此时:

  • 两个版本都符合预期 → 没有问题
  • 版本不符合预期 → 在后续步骤中找出原因

这就是判断结果的方式。

5.2 Windows 特有的关键命令:where java

在 Windows 上,确定实际使用的 java.exe 是哪个 极其重要。

where java

示例输出(示意)

C:\Program Files\Java\jdk-17\bin\java.exe
C:\Program Files\Common Files\Oracle\Java\javapath\java.exe

如果出现多行,则最上面那一行拥有最高优先级,实际运行的就是它。

5.3 为什么即使已安装仍使用旧的 Java 版本

在 Windows 上的常见原因包括:

  • 仍然存在较旧的 Java 安装
  • javapath 在 PATH 中出现得更靠前
  • JAVA_HOME 与 PATH 不匹配

特别是,如果以下目录被包含在 PATH 中:

C:\Program Files\Common Files\Oracle\Java\javapath

这通常会导致 意外调用了错误的 Java 版本

5.4 如何检查 JAVA_HOME(Windows)

接下来,检查 JAVA_HOME

echo %JAVA_HOME%
  • 如果未显示任何内容 → JAVA_HOME 未设置
  • 如果显示了意外的路径 → 可能指向了旧的 Java 版本

正确设置示例

C:\Program Files\Java\jdk-17

请注意,它应指向 JDK 根目录,而不是 bin 目录。

5.5 Windows 安全检查清单

对于初学者,按以下顺序检查有助于避免混淆:

  1. java -version
  2. javac -version
  3. where java
  4. echo %JAVA_HOME%

如果四项检查全部显示正常,
则可以得出结论:Windows 上的 Java 环境已正确配置

5.6 通过 GUI(环境变量界面)检查可以稍后进行

Windows 也提供了用于查看和编辑环境变量的 GUI 界面,但:

  • 正在使用哪个 Java
  • 为什么会出现不匹配

通过 命令输出 判断会更准确。

当需要 修复 设置时可以使用 GUI,
但始终 通过命令验证——这才是实用的做法。

6. 如何在 macOS 上检查 Java 版本

本节说明 如何在 macOS 上检查 Java 版本
与 Windows 不同,macOS 拥有 系统级的 JDK 管理机制,了解相应的命令有助于避免混淆。

6.1 在终端检查基本命令

首先,从在各平台通用的基本命令开始。

  1. 打开 终端
  2. 运行以下命令
    java -version
    

如果计划进行 Java 开发,还需要检查:

javac -version

如果这两个结果符合预期,
macOS 上实际使用的 Java 环境就是正常的。

6.2 注意:macOS 自动管理 JAVA_HOME

在 macOS 上,通常 手动硬编码 JAVA_HOME
而是使用系统命令动态获取。

代表性的命令是:

/usr/libexec/java_home

示例输出(示意)

/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home

该路径是 当前默认 JDK 的主目录

6.3 列出已安装的 JDK

如果安装了多个 JDK,以下命令非常有用:

/usr/libexec/java_home -V

运行该命令会显示:

  • 已安装的 JDK 版本
  • 供应商(Oracle / 基于 OpenJDK 等)
  • 支持的架构

在 macOS 上,这是首先确认 实际安装了哪些 JDK 的最安全方式。

6.4 当 java -versionjava_home 不匹配时

你可能会遇到如下情况:

  • /usr/libexec/java_home → Java 17
  • java -version → Java 11

在这种情况下,可能的原因有:

  • JAVA_HOME 在 配置文件中被固定(.zshrc / .bashrc
  • 不同的 Java 在 PATH 中出现得更靠前
  • Homebrew 安装的 Java 获得了优先权

在 macOS 上,用户级设置优先,因此 shell 配置文件的影响很大。

6.5 macOS 安全检查清单

在 macOS 上,按以下顺序检查可以保持条理清晰:

  1. java -version
  2. javac -version
  3. /usr/libexec/java_home
  4. /usr/libexec/java_home -V

通过这四项检查,你可以准确了解:

  • 当前使用的 Java
  • 已安装的 Java 版本列表
  • 默认 JDK

不再有歧义。

6.6 在 macOS 上考虑“切换”

在 macOS 上,常见的情况是:

  • 不同项目需要不同的 Java 版本
  • 在多个 JDK 之间切换

因此:

  • 不要假设系统中只有一个 Java
  • 始终确认 当前使用的是哪个 Java

保持这种思路可以更轻松地避免麻烦。

7. 如何在 Linux 上检查 Java 版本

本节说明 如何在 Linux 环境(尤其是服务器)中检查 Java 版本
虽然不同发行版的管理方式有所差异,但 核心概念是相同的

7.1 从基本命令开始

在 Linux 上,同样先使用常见的命令:

java -version

如果需要进行开发或构建,还要检查:

javac -version

通过这两个命令,你可以判断以下两点是否符合你的预期:

  • 运行时使用的 Java
  • 编译时使用的 JDK

7.2 使用 which java 查找实际的可执行文件

在 Linux 上,了解 实际被调用的可执行文件是哪一个 非常重要。

which java

示例输出

/usr/bin/java

该路径即 java -version 使用的实际 Java 二进制文件。

如果需要更详细的信息,运行:

ls -l $(which java)

这可以让你追踪 符号链接指向的真实目标

7.3 在 Debian / Ubuntu 上管理多个 Java 版本(update-alternatives)

在服务器上,同时安装多个 Java 版本 是非常常见的情况。
在基于 Debian/Ubuntu 的系统中,通常使用 update-alternatives 来管理这些版本。

列出 Java 替代项

update-alternatives --list java

检查当前选择

update-alternatives --display java

这里显示的路径是 系统层面选中的 Java

7.4 当 java -version 与 alternatives 不匹配时

有时会出现如下不匹配:

  • update-alternatives → Java 17
  • java -version → Java 11

可能的原因包括:

  • 用户的 PATH 中出现了不同的 Java
  • /usr/local/bin 等位置手动安装了 Java
  • 正常执行与 sudo 时的 PATH 不同

在 Linux 上,以下两者都会影响实际运行的 Java:

  • 系统级设置
  • 用户级环境

7.5 Linux 安全检查清单

在 Linux 上按以下顺序检查可以保持清晰:

  1. java -version
  2. javac -version
  3. which java
  4. update-alternatives --display java(如适用)

这样即可一目了然地获得完整信息:

  • 当前运行的 Java
  • 实际的可执行文件路径
  • 系统配置

8. 为什么显示的 Java 版本会不一致(原因与解决方案)

大多数 Java 版本问题并非由命令本身引起,而是 环境配置 导致的。
下面总结了适用于所有操作系统的常见原因。

8.1 原因 1:PATH 优先级不是你预期的那样

这是最常见的原因。

  • 旧的 Java bin 目录出现在 PATH 前面
  • 你已经安装了新 Java,但没有更新 PATH

解决办法

  • 确认实际运行的 Java 是哪个
  • 删除不必要的 PATH 条目或调整顺序

仅仅“添加”一个新路径往往不足以解决问题。

8.2 原因 2:JAVA_HOME 与运行的 Java 不匹配

  • JAVA_HOME → Java 11
  • 实际运行的 Java → Java 17

这种情况也非常常见。

解决办法

  • 将 JAVA_HOME 设置为 JDK 根目录
  • 确保 PATH 使用 $JAVA_HOME/bin

把 JAVA_HOME 看作“参考”,而 PATH 则是“执行优先级”。

8.3 原因 3:javajavac 使用了不同的版本

这是 JRE 与 JDK 版本混用 的经典案例。

  • 运行时正常
  • 开发或构建时失败

解决办法

  • 选定一个 JDK 作为标准
  • javajavac 均指向同一 JDK

8.4 原因 4:IDE 或构建工具使用了不同的 JDK

  • 终端中一切正常
  • IDE 或 CI 中出现错误

在这种情况下,原因往往是 IDE 特定的 JDK 设置

解决办法

  • 明确检查 IDE 设置中使用的 JDK
  • 不要仅仅依赖“自动检测”

9. 超越仅“检查”的清单

最后,让我们整理 检查 Java 版本后应做的事项

9.1 如果你的目标仅是运行 Java

  • java -version 是否满足要求?
  • 应用程序是否能够正确启动?

9.2 如果你的目标是开发或构建

  • javac -version 是否满足要求?
  • javajavac 显示的版本是否一致?
  • JAVA_HOME 与 PATH 是否保持一致?

9.3 如果你使用多个 Java 版本

  • 始终确认当前使用的是哪个 Java
  • 了解针对不同操作系统的管理方式(macOS / Linux)

10. 常见问题解答(FAQ)

10.1 java -versionjavac -version 有何区别?

java -version 检查 Java 运行时版本,
javac -version 检查开发编译器(JDK)版本。
由于两者用途不同,检查两者是标准做法。

10.2 为什么找不到 javac

  • 未安装 JDK
  • PATH 设置不正确

在大多数情况下,原因是上述两者之一。

10.3 我已安装 Java,但仍显示旧版本

这通常意味着 PATH 中另一个 Java 的优先级更高
使用 where java(Windows)或 which java(macOS/Linux)检查实际使用的二进制文件。

10.4 我可以安全地使用多个 Java 版本吗?

可以,完全可以。
但关键是始终要清楚 当前使用的是哪个 Java

10.5 我应该使用哪个 Java 版本?

如果没有特殊要求,选择 LTS(长期支持)版本 是最安全的选择。
如果项目指定了版本,则始终以该要求为优先。