本页面概述了 Java 8 至 21 版本中引入的关键特性。它为希望了解 Java 随时间演变以及每个版本中可用新功能的开发者提供了全面的参考。有关特定 Java 框架或单个 Java 功能的更详细解释,请参阅其各自的文档页面。
了解 Java 的发布周期对于计划版本迁移的开发者很重要。从 Java 9 开始,Oracle 采用了六个月的发布周期,并且每三年发布一个长期支持(LTS)版本。
主要 Java 版本时间线
来源:docs/java/new-features/java11.md8-13 docs/java/new-features/java21.md8-12
LTS 支持周期
来源:docs/java/new-features/java11.md8-13), docs/java/new-features/java17.md8-14
以下是每个主要 Java 版本中添加的关键功能的摘要
| 版本 | 发布日期 | 主要功能 |
|---|---|---|
| Java 8 | 2014年3月 | Lambda 表达式、Stream API、函数式接口、Optional、接口中的默认方法、日期/时间 API |
| Java 9 | 2017年9月 | 模块系统、JShell、改进的 Javadoc、集合工厂方法、私有接口方法、Stream API 增强 |
| Java 10 | 2018年3月 | 局部变量类型推断(var)、垃圾收集器改进、应用程序类数据共享 |
| Java 11 | 2018年9月 | HTTP 客户端(标准)、ZGC、启动单文件源码程序、String/文件增强 |
| Java 12 | 2019年3月 | Switch 表达式(预览)、Constants API、微基准测试套件、Shenandoah GC |
| Java 14 | 2020年3月 | Switch 表达式(标准)、Record(预览)、instanceof 的模式匹配(预览)、有用的 NullPointerException 信息 |
| Java 15 | 2020年9月 | Sealed 类(预览)、文本块(标准)、ZGC 生产就绪、隐藏类 |
| Java 16 | 2021年3月 | Record(标准)、instanceof 的模式匹配(标准)、Unix 域套接字通道、外部内存访问 API(孵化器) |
| Java 17 | 2021年9月 | Sealed 类(标准)、Switch 的模式匹配(预览)、外部函数与内存 API(孵化器)、Vector API(孵化器) |
| Java 19 | 2022年9月 | 虚拟线程(预览)、结构化并发(孵化器)、Switch 的模式匹配(第四次预览)、外部函数与内存 API(预览) |
| Java 21 | 2023年9月 | 虚拟线程(标准)、Switch 的模式匹配、Record 模式、字符串模板(预览)、有序集合 |
来源:docs/java/new-features/java8-common-new-features.md12-14), docs/java/new-features/java9.md8-9), docs/java/new-features/java11.md8-9), docs/java/new-features/java17.md8-14), docs/java/new-features/java21.md8-12
许多 Java 特性通过预览、孵化和标准化阶段跨越多个版本进行演进。
来源:docs/java/new-features/java16.md82-87), docs/java/new-features/java20.md22-23), docs/java/new-features/java21.md25-28
Java 的发展可以分为几个主要改进领域
来源:docs/java/new-features/java8-common-new-features.md100-106), docs/java/new-features/java10.md18-24), docs/java/new-features/java14-15.md34-52), docs/java/new-features/java16.md104-125), docs/java/new-features/java21.md31-40)
来源:docs/java/new-features/java8-common-new-features.md266-271), docs/java/new-features/java9.md60-64), docs/java/new-features/java11.md21-42), docs/java/new-features/java21.md128-132)
来源:docs/java/new-features/java9.md77-90), docs/java/new-features/java11.md73-91), docs/java/new-features/java12-13.md89-100), docs/java/new-features/java14-15.md148-156), docs/java/new-features/java21.md259-275)
Lambda 表达式为 Java 带来了函数式编程,使得函数可以作为方法参数,并创建匿名函数。该特性是许多后续 Java 特征的基础。
Lambda 语法和用法:
// Basic syntax
(parameters) -> expression
// or
(parameters) -> { statements; }
// Examples
Runnable r = () -> System.out.println("Hello World");
Consumer<String> c = s -> System.out.println(s);
Comparator<Integer> comp = (a, b) -> a - b;
Lambda 表达式适用于函数式接口——即只有一个抽象方法的接口(SAM)。Java 8 在 java.util.function 包中引入了几个内置的函数式接口。
| 函数式接口 | 描述 | 方法 |
|---|---|---|
Consumer<T> | 接受单个输入参数,不返回结果 | void accept(T t) |
Supplier<T> | 不接受参数,但返回结果 | T get() |
Function<T,R> | 接受一个参数并产生一个结果 | R apply(T t) |
Predicate<T> | 表示一个断言(返回布尔值的函数) | boolean test(T t) |
来源:docs/java/new-features/java8-common-new-features.md100-115), docs/java/new-features/java8-common-new-features.md169-196)
Stream API 提供了一种函数式的方式来处理对象集合。它支持以声明式的方式对数据集合进行 filter、map、reduce、find、match 和 sort 等操作。
Stream 的创建和操作:
Stream 的关键特性
来源:docs/java/new-features/java8-common-new-features.md266-290), docs/java/new-features/java8-common-new-features.md386-436)
Java 9 引入了一个模块化系统,允许开发人员创建具有显式依赖关系的、定义良好的模块。这使得封装更好,并阐明了系统中不同部分之间的依赖关系。
模块化系统结构:
模块在 module-info.java 中定义,包含 exports 和 requires 语句。
JDK 的模块化被组织成大约 94 个标准模块,使平台更易于维护,并允许开发人员使用 jlink 创建更小的运行时镜像。
来源:docs/java/new-features/java9.md42-76)
Java 10 引入了 var 关键字,它支持局部变量类型推断,在保持静态类型的同时减少了样板代码。
var 的限制
var,使其可用于 lambda 参数列表来源:docs/java/new-features/java10.md18-47), docs/java/new-features/java11.md93-110)
Records 提供了一种简洁的语法来声明类,这些类是不可变数据的透明载体。它们会自动实现构造函数、访问器、equals、hashCode 和 toString 方法。
Records 的演进
Records 适用于
来源:docs/java/new-features/java14-15.md58-88), docs/java/new-features/java16.md104-125)
模式匹配允许测试一个对象是否具有某种类型或结构,并从中提取组件。该特性在多个 Java 版本中不断演进。
来源:docs/java/new-features/java16.md81-102), docs/java/new-features/java20.md43-141), docs/java/new-features/java21.md283-299)
虚拟线程在 Java 19 中作为预览功能引入,并在 Java 21 中标准化。它们是轻量级的线程,可以通过使用每请求一个线程的风格编写并发应用程序来显著提高应用程序的吞吐量。
虚拟线程的关键特性
创建虚拟线程
来源:docs/java/new-features/java19.md73-86), docs/java/new-features/java20.md209-275), docs/java/new-features/java21.md339-377)
外部函数与内存 API 在 Java 17 中引入,并通过多个版本不断演进,为 Java 程序提供了一种与 Java 运行时外部的代码和数据进行交互的方式。这是 JNI 的更安全、更高效的替代方案。
关键组件
MemorySegment) - 安全访问 Java 堆外的内存MemoryLayout) - 描述内存内容的组织方式Linker) - 与原生函数互操作使用示例
演进历程
来源:docs/java/new-features/java17.md160-166), docs/java/new-features/java19.md24-71), docs/java/new-features/java21.md300-306)
Java 使用分阶段流程来引入重要特性
特性生命周期:
Java 21 中当前值得关注的预览/孵化特性
字符串模板 (Preview) - 提供一种更灵活、更易读的方式来创建包含嵌入式表达式的字符串内容
结构化并发 (Preview) - 将多个任务视为一个单一的工作单元,从而简化多线程编程
未命名模式和变量(预览) - 使用下划线(_)来表示未使用其值的变量
来源: docs/java/new-features/java21.md31-126), docs/java/new-features/java21.md308-337)
自 Java 8 以来,Java 得到了显著的演进,语言特性和运行时改进都使得 Java 开发更具生产力和效率。主要趋势包括:
了解这些特性有助于开发人员编写更有效、可维护且性能更好的 Java 代码。定期的发布周期确保 Java 在保持向后兼容性的同时,能够随着行业需求不断发展。
来源: docs/java/new-features/java8-common-new-features.md1046-1054), docs/java/new-features/java21.md379-383)
刷新此 Wiki
最后索引时间2025年4月17日(ff77b0)