Java 实例 – 如何查看当前 Java 运行的版本?(保姆级教程)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

前言

在 Java 开发中,查看当前运行的 Java 版本是一项基础但重要的操作。无论是调试代码、排查兼容性问题,还是确保开发环境与生产环境的一致性,了解 Java 版本信息都是关键步骤。对于编程初学者而言,这可能是接触的第一个系统级操作;而中级开发者则可能需要在复杂环境中快速定位版本差异。本文将以实例和代码示例为切入点,分步骤讲解如何查看 Java 版本,并深入解析其背后的原理与应用场景,帮助读者全面掌握这一技能。


命令行方法:最直接的版本查询方式

步骤 1:打开终端或命令行工具

无论使用 Windows、macOS 还是 Linux,查看 Java 版本的第一步都是通过命令行工具执行。

  • Windows 用户:按 Win + R,输入 cmd 并回车,打开命令提示符。
  • macOS/Linux 用户:打开终端(Terminal)。

步骤 2:执行 java -version 命令

在命令行中输入以下命令并回车:

java -version  

该命令会输出当前 Java 运行环境(JRE)或开发工具包(JDK)的版本信息。

输出结果解析

以 macOS 环境为例,执行命令后可能得到类似以下的输出:

java version "17.0.9" 2023-10-17  
Java(TM) SE Runtime Environment (build 17.0.9+9-62)  
Java HotSpot(TM) 64-Bit Server VM (build 17.0.9+9-62, mixed mode, sharing)  
  • 第一行:显示 Java 的主版本号(如 17.0.9)。
  • 第二行:描述运行环境的构建信息。
  • 第三行:说明虚拟机(JVM)的版本和运行模式。

不同操作系统的命令差异

以下表格对比了主流操作系统中命令的执行方式:

操作系统命令输出内容示例
Windowsjava -versionjava version "1.8.0_361"
macOSjava -versionjava version "11.0.19"
Linux (Ubuntu)java -versionopenjdk version "17.0.6" 2023-01-17

通过 Java 代码内检查版本:编程场景的解决方案

在实际开发中,可能需要在 Java 程序运行时动态获取版本信息。以下是三种常用方法:

方法 1:使用 System 类的属性

Java 内置的 System 类提供了访问系统属性的功能,其中 java.version 属性直接存储了当前 JVM 的版本号。

public class JavaVersionChecker {  
    public static void main(String[] args) {  
        String javaVersion = System.getProperty("java.version");  
        System.out.println("当前 Java 版本: " + javaVersion);  
    }  
}  

执行此代码将输出类似 17.0.9 的结果。

知识点延伸

  • 系统属性:Java 通过 System.getProperty() 可以访问操作系统、JVM 等的配置信息。常见的属性还包括 os.name(操作系统名称)、user.dir(当前工作目录)等。
  • 比喻:可以将系统属性想象为 JVM 的“身份证”,每个属性都是其身份信息的一部分。

方法 2:通过 Runtime 类执行命令

利用 Runtime.getRuntime().exec() 方法,可以在 Java 程序中直接调用系统命令 java -version,并捕获其输出结果。

public class RuntimeVersionChecker {  
    public static void main(String[] args) {  
        try {  
            Process process = Runtime.getRuntime().exec("java -version");  
            // 由于命令输出到标准错误流,需读取 errorStream  
            BufferedReader reader = new BufferedReader(  
                new InputStreamReader(process.getErrorStream())  
            );  
            String line;  
            while ((line = reader.readLine()) != null) {  
                System.out.println(line);  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
}  

此方法的优势在于兼容性,但需注意:

  • 跨平台性:命令 java -version 在不同系统中均有效。
  • 性能开销:执行外部命令会比直接读取属性更耗资源,建议仅在必要时使用。

方法 3:通过反射获取 JVM 版本(高级技巧)

对于需要更详细版本信息的场景(如 JVM 内部构建号),可通过反射访问 java.lang.management 包中的类。

import java.lang.management.ManagementFactory;  

public class ManagementVersionChecker {  
    public static void main(String[] args) {  
        String runtimeVersion = ManagementFactory.getRuntimeMXBean().getVmVersion();  
        System.out.println("JVM 版本: " + runtimeVersion);  
    }  
}  

输出可能为:

JVM 版本: 17.0.9+9-62  

此方法返回的信息更贴近 JVM 的实现细节,适合需要精确匹配版本号的场景。


版本号的组成与含义:理解版本信息的结构

Java 版本号遵循语义化版本控制(Semantic Versioning)规范,通常格式为 MAJOR.MINOR.PATCH。例如 17.0.9 的含义如下:

  • 主版本号(MAJOR):表示重大更新或不兼容变更,如 Java 8 到 Java 11 的跳跃。
  • 次版本号(MINOR):代表功能增强或性能改进,通常兼容旧版本。
  • 修订号(PATCH):修复 bug 或安全问题,完全兼容前一版本。

特殊版本标识符

部分版本可能包含额外信息,例如:

  • 17.0.9+9-62+9 表示构建次数,-62 是厂商自定义的标识符(如 OpenJDK 发行版)。
  • 1.8.0_361:旧版命名方式,1.8 对应 Java 8,_361 是更新补丁号。

版本兼容性说明

  • Java 8 及更早版本:版本号以 1.x 形式呈现(如 1.8 对应 Java 8)。
  • Java 9 及以后版本:采用整数主版本号(如 17 对应 Java 17)。

常见问题与解决方案

问题 1:命令 java -version 未找到

如果执行命令时出现 Command not found不是内部或外部命令,通常是因为 Java 未正确安装或环境变量未配置。

解决步骤:

  1. 验证 Java 安装
    • Windows:在命令行输入 where java 查看安装路径。
    • macOS/Linux:输入 which javatype java
  2. 配置环境变量
    • 将 Java 的 bin 目录路径(如 /usr/lib/jvm/java-17-openjdk/bin)添加到系统 PATH 变量中。
  3. 重新启动终端:确保环境变量生效。

问题 2:代码中读取的版本与命令行结果不一致

这可能发生在多 Java 版本共存的环境中,例如同时安装了 JDK 8 和 JDK 17。

原因分析:

  • IDE 配置问题:IDE(如 IntelliJ IDEA 或 Eclipse)可能使用了不同于系统默认的 JDK。
  • 运行时路径优先级:系统 PATH 变量中 Java 的路径顺序可能影响命令行和代码的执行结果。

解决方案:

  • 在代码中显式指定 JDK 路径:通过 IDE 的项目设置或命令行参数 -J-Djava.home=/path/to/jdk
  • 检查代码运行时的 JVM 路径:通过 System.getProperty("java.home") 输出 JVM 的安装目录。

总结

本文通过命令行操作、Java 代码示例和版本解析,系统化地讲解了如何查看当前 Java 运行的版本。无论是通过简单的命令 java -version,还是在代码中利用 System.getProperty()ManagementFactory,开发者都能快速获取所需信息。理解版本号的结构和兼容性规则,有助于在复杂开发环境中避免因版本冲突导致的问题。

对于初学者,建议从命令行方法入手,逐步掌握系统级操作;中级开发者则可结合代码内检查版本的技术,优化自动化脚本或部署流程。记住,Java 版本的管理是构建健壮应用的基础,持续关注版本更新与兼容性文档,将为你的开发之路提供坚实保障。

最新发布