Java(最初称为 Oak)自 1995 年诞生以来,经历了多次重大版本迭代,从早期的 JDK 1.0 到如今的 Java 21,每一个版本都带来了显著的功能增强和性能优化。以下是 Java 主要版本的迭代历史及核心更新内容:

Java 1.0(1996 年 1 月)

  • 首次正式发布,奠定了 Java 的核心基础:
    • 引入Java 虚拟机(JVM) 和字节码机制,实现 “一次编写,到处运行(Write Once, Run Anywhere)”。
    • 包含基础类库(java.langjava.util等)、AWT(抽象窗口工具包)用于 GUI 开发。
    • 支持多线程、垃圾回收(GC)等核心特性。

Java 1.1(1997 年 2 月)

  • 核心增强
    • 引入内部类(Inner Classes),允许在类内部定义另一个类。
    • 新增反射机制java.lang.reflect包),支持动态获取类信息和调用方法。
    • 增加 JDBC API,实现对数据库的统一访问。
    • 改进 AWT,支持事件委托模型(Event Delegation Model)。
    • 新增 RMI(远程方法调用),支持分布式通信。

Java 1.2(1998 年 12 月)

  • 重大升级,更名为 “Java 2”,划分为 J2SE(标准版)、J2EE(企业版)、J2ME(微型版):
    • 引入集合框架java.util.Collection),包括ArrayListHashMap等容器类,替代旧的VectorHashtable
    • 新增严格 fp 关键字,确保浮点数运算的跨平台一致性。
    • 引入Swing 组件库,提供更丰富的 GUI 组件(如JFrameJButton),替代部分 AWT 功能。
    • 支持JIT(即时编译),提升执行效率。

Java 1.3(2000 年 5 月)

  • 主要更新
    • 引入Java Naming and Directory Interface(JNDI),支持命名和目录服务。
    • 新增CORBA(公共对象请求代理架构) 支持,强化分布式计算。
    • 改进垃圾回收机制,默认使用分代收集器
    • 增加java.math.BigDecimal的精度支持。

Java 1.4(2002 年 2 月)

  • 功能扩展
    • 引入正则表达式java.util.regex包),支持字符串模式匹配。
    • 新增NIO(非阻塞 IO) 包(java.nio),提升 IO 操作效率。
    • 支持XML 解析(JAXP 1.1)和 XSLT 转换。
    • 增加assert关键字,用于调试和测试。
    • 引入IPv6支持,优化网络功能。

Java 5(2004 年 9 月,版本号跳跃至 5.0,不再使用 1.x)

  • 里程碑式更新,引入大量现代编程语言特性:
    • 泛型(Generics):支持类型参数(如List<String>),提升类型安全性。
    • 增强 for 循环(foreach):简化集合遍历(for (String s : list) { ... })。
    • 自动装箱 / 拆箱:基本类型与包装类自动转换(如intInteger)。
    • 枚举(Enums):通过enum关键字定义枚举类型,替代常量模式。
    • 可变参数(Varargs):允许方法接收可变数量的参数(如void func(String... args))。
    • 静态导入:直接导入类的静态方法 / 字段,简化代码。
    • 并发工具增强:新增java.util.concurrent包(如ThreadPoolExecutorConcurrentHashMap),简化多线程编程。

Java 6(2006 年 12 月)

  • 注重稳定性和性能
    • 引入脚本语言支持(JSR 223),可在 Java 中调用 JavaScript 等脚本。
    • 增强JDBC 4.0,支持注解配置和自动加载驱动。
    • 改进垃圾回收,新增G1 收集器(实验性)。
    • 优化 JVM 启动速度和内存占用。
    • 新增java.util.ServiceLoader,简化服务发现机制。

Java 7(2011 年 7 月)

  • 语法和性能优化
    • try-with-resources:自动关闭实现AutoCloseable的资源(如文件流),简化异常处理。
    • 钻石运算符(Diamond Operator):简化泛型实例化(List<String> list = new ArrayList<>())。
    • 字符串在 switch 语句中使用:支持switch (str) { case "a": ... }
    • 数字字面量增强:支持二进制表示(0b1010)和下划线分隔(1_000_000)。
    • NIO 2.0:新增java.nio.file包,提供更强大的文件系统操作(如PathFiles)。
    • G1 收集器从实验性变为正式特性。

Java 8(2014 年 3 月)

  • 革命性更新,引入函数式编程范式:
    • Lambda 表达式:允许将函数作为参数传递(如(a, b) -> a + b),简化代码。
    • Stream API:提供声明式集合处理(如list.stream().filter().map().collect())。
    • 接口默认方法:接口中可定义带实现的default方法,兼容旧版本。
    • 方法引用:通过::语法引用已有方法(如String::length)。
    • Optional 类:减少空指针异常(NPE),优雅处理 null 值。
    • 新日期时间 APIjava.time包):替代旧的DateCalendar,支持不可变对象和时区处理。
    • ** Nashorn JavaScript 引擎 **:替代 Rhino,提升脚本执行效率。
    • 并行流:支持多线程处理集合,提升大数据量运算效率。

Java 9(2017 年 9 月)

  • 模块化系统引入
    • Project Jigsaw:引入模块系统(module-info.java),将 JDK 拆分为多个模块,减少内存占用。
    • JShell:交互式编程工具,支持即时执行代码片段,简化测试。
    • 接口私有方法:允许接口定义private方法,增强代码复用。
    • 集合工厂方法:新增List.of()Map.of()等,创建不可变集合。
    • 增强 Stream API:新增takeWhile()dropWhile()等方法。
    • HTTP/2 客户端(实验性):支持异步 HTTP 请求。

Java 10(2018 年 3 月)

  • 短期支持版本(6 个月),主要更新:
    • 局部变量类型推断(var 关键字):允许var list = new ArrayList<String>(),编译器自动推断类型(仅限局部变量)。
    • 应用类数据共享(AppCDS):提升应用启动速度,共享类数据。
    • G1 收集器优化:支持并行 Full GC,减少停顿时间。
    • 移除javah工具,功能由javac替代。

Java 11(2018 年 9 月,长期支持版本 LTS)

  • LTS 版本,企业级应用首选:
    • 字符串增强:新增isBlank()strip()lines()等方法。
    • Optional 增强:新增isEmpty()方法,简化空判断。
    • HTTP 客户端正式发布java.net.http包),替代旧的HttpURLConnection
    • 移除 Java EE 和 CORBA 模块(如java.xml.ws),推动模块化。
    • ZGC 收集器(实验性):低延迟垃圾回收器,支持 TB 级内存。
    • Epsilon 收集器(实验性):无操作收集器,用于性能测试。
    • jshell增强:支持代码片段保存和加载。

Java 12(2019 年 3 月)

  • 预览特性为主
    • Switch 表达式预览:支持表达式语法(switch (x) { case 1 -> 10; case 2 -> 20; })。
    • G1 收集器优化:新增 “可中断的混合收集”,提升响应速度。
    • Microbenchmark 套件:引入 JMH 基准测试工具,方便性能测试。

Java 13(2019 年 9 月)

  • 增强预览特性
    • Switch 表达式二次预览:新增yield关键字返回结果(case 1 -> yield 10;)。
    • 文本块预览"""包裹多行字符串):简化 HTML、SQL 等多行文本编写。
    • ZGC 优化:支持将未使用的内存归还给操作系统。

Java 14(2020 年 3 月)

  • 正式特性与预览结合
    • Switch 表达式正式发布:支持箭头语法和yield
    • 文本块二次预览:新增stripIndent()translateEscapes()等方法。
    • Records 预览:简化数据载体类定义(record Point(int x, int y) {},自动生成equalshashCode等方法)。
    • NullPointerException 优化:错误信息更清晰,提示具体哪个对象为 null。
    • ZGC 正式发布:生产可用,低延迟(亚毫秒级停顿)。

Java 15(2020 年 9 月)

  • 多个预览特性转正
    • 文本块正式发布"""语法成为标准。
    • Records 二次预览:调整语法,增强兼容性。
    • 密封类预览(Sealed Classes):限制类的继承(sealed class A permits B, C)。
    • Shenandoah 收集器正式发布:低延迟 GC,支持并发整理。
    • 隐藏类(Hidden Classes):用于动态生成类,提升框架(如 Spring、Groovy)性能。

Java 16(2021 年 3 月)

  • 功能丰富的版本
    • Records 正式发布:简化不可变数据类的编写。
    • 密封类二次预览:完善继承控制机制。
    • 默认启用 C++14 标准:改进 JVM 的 C++ 代码库。
    • Vector API 预览:提供高性能的向量运算支持。
    • ZGC 优化:支持类数据共享(CDS)。

Java 17(2021 年 9 月,长期支持版本 LTS)

  • 最新 LTS 版本,企业级应用广泛采用:
    • 密封类正式发布:通过sealednon-sealedpermits关键字控制继承。
    • 移除实验性 AOT 和 JIT 编译器
    • 增强伪随机数生成器:新增RandomGenerator接口,统一随机数生成。
    • Switch 模式匹配预览:支持case Integer i -> ...的模式匹配。
    • 强封装 JDK 内部 API:限制对sun.misc等内部类的访问,提升安全性。

Java 18(2022 年 3 月)

  • 主要更新
    • UTF-8 作为默认字符集:替代系统默认字符集,统一跨平台编码。
    • 简单 Web 服务器:内置轻量级 HTTP 服务器(com.sun.net.httpserver),方便测试。
    • Switch 模式匹配二次预览
    • Vector API 二次 incubator:优化向量运算性能。

Java 19(2022 年 9 月)

  • 预览和 incubator 特性
    • 虚拟线程预览(Virtual Threads):轻量级线程,提升高并发场景性能(Project Loom)。
    • 结构化并发预览(Structured Concurrency):简化多线程代码,提升可读性和可靠性。
    • Switch 模式匹配三次预览
    • 外部函数和内存 API incubator:支持调用本地代码和管理堆外内存。

Java 20(2023 年 3 月)

  • 延续预览特性
    • 虚拟线程二次预览:优化 API 和性能。
    • 结构化并发二次预览
    • Switch 模式匹配正式发布:支持模式匹配(如case String s && s.length() > 0)。
    • 作用域值预览(Scoped Values):替代线程局部变量(ThreadLocal),更安全地共享数据。

Java 21(2023 年 9 月,长期支持版本 LTS)

  • 最新 LTS 版本,引入多项重要特性:
    • 虚拟线程正式发布:轻量级线程,大幅提升并发处理能力,简化高并发编程。
    • 结构化并发正式发布:通过StructuredTaskScope管理线程生命周期,避免线程泄漏。
    • Switch 模式匹配增强:支持更多模式类型。
    • 序列集合(Sequenced Collections):新增SequencedCollectionSequencedMap接口,统一有序集合操作。
    • 未命名模式和变量:允许用_表示未使用的模式或变量(如case _ -> ...)。

总结

Java 的版本迭代呈现出以下趋势:

  1. 语法简化:从泛型、Lambda 到 Records、模式匹配,不断降低代码复杂度。
  2. 性能优化:从 JIT、G1 到 ZGC、虚拟线程,持续提升运行效率和并发能力。
  3. 安全性增强:封装内部 API、强化类型检查,减少安全漏洞。
  4. 开发效率提升:引入 JShell、文本块、局部变量类型推断等,提升编码体验。

对于企业应用,建议优先选择 LTS 版本(如 Java 8、11、17、21),以获得长期支持和稳定性;而开发者可尝试最新版本,体验前沿特性。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐