面试之 Java 新特性 一览表

面试不仅是对人员基本信息的考核,更是对基础技能的现场考核,知识体系的建立,需要应试者好好梳理和掌握。这里我整理下java8到java24的新特性。

目录

[Java 8(2014 年 3 月)](#Java 8(2014 年 3 月))

[Java 9(2017 年 9 月)](#Java 9(2017 年 9 月))

[Java 10(2018 年 3 月)](#Java 10(2018 年 3 月))

[Java 11(2018 年 9 月,LTS)](#Java 11(2018 年 9 月,LTS))

[Java 12(2019 年 3 月)](#Java 12(2019 年 3 月))

[Java 13(2019 年 9 月)](#Java 13(2019 年 9 月))

[Java 14(2020 年 3 月)](#Java 14(2020 年 3 月))

[Java 15(2020 年 9 月)](#Java 15(2020 年 9 月))

[Java 16(2021 年 3 月)](#Java 16(2021 年 3 月))

[Java 17(2021 年 9 月,LTS)](#Java 17(2021 年 9 月,LTS))

[Java 18(2022 年 3 月)](#Java 18(2022 年 3 月))

[Java 19(2022 年 9 月)](#Java 19(2022 年 9 月))

[Java 20(2023 年 3 月)](#Java 20(2023 年 3 月))

[Java 21(2023 年 9 月,LTS)](#Java 21(2023 年 9 月,LTS))

[Java 22(2024 年 3 月)](#Java 22(2024 年 3 月))

[Java 23(2024 年 9 月)](#Java 23(2024 年 9 月))

[Java 24(2025 年 3 月)](#Java 24(2025 年 3 月))


Java 8(2014 年 3 月)

  • 语言特性

    • 引入 Lambda 表达式与函数式接口,简化代码。

    • 方法引用,通过 Class::method 引用已有方法。

    • 接口默认方法和静态方法,增强接口的灵活性。

    • 重复注解和类型注解,支持注解的多样化使用。

  • 核心库

    • Stream API,提供声明式、链式的集合操作。

    • Optional 类,优雅地处理"可能为空"的值。

    • 全新的日期时间 API(如 LocalDateLocalTime 等)。

    • 并发增强,如 CompletableFuture

  • JVM 与性能优化

    • 移除永久代,引入元空间。

    • 垃圾回收优化,引入 G1 垃圾收集器。

    • HashMap 性能改进,引入红黑树。

  • 工具与其他

    • Nashorn JavaScript 引擎(后被移除)。

    • 增强的注解处理和反射。

Java 9(2017 年 9 月)

  • 语言和语法增强

    • 模块化系统(Project Jigsaw),引入模块描述符 module-info.java

    • 接口私有方法,增强接口内部实现的封装性。

    • try-with-resources 改进,支持直接使用已声明的资源变量。

  • 核心库增强

    • 集合工厂方法,如 List.of()Map.of()

    • Stream API 改进,新增 takeWhiledropWhile 等方法。

    • 进程 API,通过 ProcessHandle 提供更丰富的进程管理功能。

    • 响应式流(Reactive Streams),引入 Flow API。

    • HTTP/2 客户端(孵化)。

  • JVM 和性能

    • G1 成为默认 GC。

    • 字符串存储优化(Compact Strings)。

    • AOT 编译(实验)。

    • VarHandle 和内存栅栏。

    • 多版本 JAR 文件支持。

  • 工具与其他

    • JShell,交互式 REPL 工具。

    • jlink,用于创建自定义运行时镜像。

Java 10(2018 年 3 月)

  • 语言特性

    • 局部变量类型推断(var),简化局部变量声明。
  • 核心库增强

    • 不可变集合拷贝,如 List.copyOf()

    • Optional 增强,新增 orElseThrow() 等方法。

  • 性能和 JVM 改进

    • G1 并行 Full GC。

    • 应用类数据共享(AppCDS)。

    • 线程局部握手,优化 JVM 内部机制。

    • 备用内存设备上的堆支持。

  • 工具和平台

    • 实验性 Java JIT 编译器 - Graal。

    • 根证书开源。

Java 11(2018 年 9 月,LTS)

  • 语言特性

    • Lambda 参数的局部变量语法支持。

    • 直接启动单文件程序,简化脚本化使用。

  • 核心库增强

    • 标准化 HTTP 客户端,支持 HTTP/1.1 和 HTTP/2。

    • 字符串 API 增强,如 isBlank()strip()repeat() 等。

    • 文件方法和集合增强,如 Files.readString()

  • 性能与内存

    • ZGC(可伸缩低延迟 GC)和 Epsilon GC(实验性)。

    • 低开销 Heap Profiling。

    • Flight Recorder 开源。

    • TLS 1.3 支持。

  • 工具与其他

    • 移除和弃用部分特性(如 Java EE 模块、Nashorn 等)。

    • Java 命令新选项。

Java 12(2019 年 3 月)

  • 语言特性(预览)

    • Switch 表达式(预览),支持箭头语法和 yield

    • Instanceof 模式匹配(预览),简化类型检查和转换。

  • 核心库增强

    • String 新方法,如 indent()transform()

    • Files.mismatch 方法,比较文件内容。

    • NumberFormat 压缩数字。

    • Collector.Teeing,支持流的拆分和合并。

  • JVM 与垃圾回收

    • Shenandoah GC(实验性)。

    • G1 优化,如可中止的混合收集。

  • 工具和其他

    • Microbenchmark Harness(试验)。

    • JVM 常量 API。

Java 13(2019 年 9 月)

  • 语言特性(预览)

    • 文本块(Text Blocks,预览),简化多行字符串书写。

    • Switch 表达式第二次预览,引入 yield 关键字。

  • 核心库与其他

    • ZGC 改进,支持堆内存归还。

    • Socket API 重构,提升并发性能。

    • 动态 CDS 归档,简化类数据共享。

Java 14(2020 年 3 月)

  • JVM 改进

    • 空指针异常详细提示。
  • 语言特性

    • Switch 表达式正式推出。

    • Records(记录类,预览),简化数据载体类的定义。

    • 文本块第二次预览。

    • instanceof 模式匹配第二次预览。

  • 核心库和工具

    • 移除过时的 CMS GC。

    • ZGC 扩展到 macOS/Windows。

    • jpackage 工具(孵化),用于打包原生安装包。

Java 15(2020 年 9 月)

  • 核心语言特性

    • 文本块正式发布。

    • 密封类(预览),限制类的继承。

    • 隐藏类(Hidden Classes),用于动态生成类。

  • 核心库与安全

    • CharSequence.isEmpty() 方法。

    • TreeMap 增强,支持 putIfAbsent 等方法。

    • 新的数字签名算法 EdDSA。

  • JVM 和性能

    • ZGC 转正,支持多平台。

    • 弃用 Nashorn JavaScript 引擎。

Java 16(2021 年 3 月)

  • 语言特性

    • Records(记录类)正式发布。

    • 模式匹配的 instanceof 正式发布。

    • 密封类第二次预览。

  • 核心库增强

    • Vector API(孵化),支持 SIMD 指令。

    • Foreign Memory Access API(孵化),安全访问堆外内存。

    • JDK 内部 API 强封装。

  • 工具与 JVM

    • jpackage 工具正式发布。

    • 迁移至 Git/GitHub。

    • Alpine/Linux AArch64 移植。

Java 17(2021 年 9 月,LTS)

  • 语言特性

    • 密封类正式发布。

    • Switch 模式匹配(预览)。

  • 核心库

    • 增强的伪随机数生成器。

    • 跨平台渲染管线(macOS Metal)。

    • 弃用安全管理器。

    • 移除 RMI 激活机制。

  • 性能与内部

    • 永久性强封装 JDK 内部。

    • 移除实验性 AOT/JIT 编译器。

Java 18(2022 年 3 月)

  • 平台与性能

    • 默认字符集 UTF-8。

    • 简单的 Web 服务器。

    • 核心类重构(MethodHandle 实现)。

  • 新特性和 API

    • 代码段(Snippet)标签 for JavaDoc。

    • Vector API 第三次孵化。

    • 互联网地址解析 SPI。

    • 外部函数 & 内存 API 第二次孵化。

    • Switch 模式匹配第二次预览。

    • 弃用终结器 Finalization。

  • 安全与密码

    • 默认禁止弱算法。

Java 19(2022 年 9 月)

  • 并发与虚拟线程

    • 虚拟线程(预览)。

    • 结构化并发(孵化)。

  • 语言和模式匹配

    • 记录模式(预览)。

    • Switch 模式匹配第三次预览。

  • 外部接口和内存

    • 外部函数与内存 API(预览)。
  • 其他改进

    • 虚拟线程 Pinning 问题优化。

    • Linux/RISC-V 移植。

Java 20(2023 年 3 月)

  • 项目 Loom 持续改进

    • 虚拟线程第二次预览。

    • 结构化并发第二次孵化。

    • 作用域值(孵化)。

  • 模式匹配和类型系统

    • 记录模式第二次预览。

    • Switch 模式匹配第四次预览。

    • 泛型实例推断改进(预览)。

  • 外部接口

    • 外部函数 & 内存 API 第二次预览。

Java 21(2023 年 9 月,LTS)

  • 语言特性

    • 字符串模板(预览)。

    • 记录模式 & 模式匹配 for switch(正式)。

    • 未命名模式和变量(正式)。

    • 未命名类和实例 main 方法(预览)。

  • 并发和虚拟线程

    • 虚拟线程正式发布。

    • Sequenced Collections(序列集合)。

  • JVM 和性能

    • 分代 ZGC(实验)。

    • 禁用安全管理器。

    • 虚拟线程同步非阻塞平台线程。

    • 类加载和链接缓存(预览)。

    • 类文件 API 正式发布。

Java 22(2024 年 3 月)

  • 语言与语法

    • 未命名模式和变量转正。

    • 外部函数和内存 API 正式发布。

    • 多文件源代码程序启动。

    • 构造函数中允许语句在 super() 之前(预览)。

  • 核心库与安全

    • 类文件 API 第二次预览。

    • 流收集器 API(预览)。

    • Markdown 文档注释。

  • 其他变化

    • G1 区域固定。

    • Unsafe 内存访问方法弃用。

Java 23(2024 年 9 月)

  • 语言与语法

    • 原始类型模式(预览)。

    • 类文件 API 第二次预览。

    • Markdown JavaDoc 正式。

    • 向量 API 第八次孵化。

    • Stream 收集器第二次预览。

  • JVM 与安全

    • 禁用 SecurityManager 完成。

    • TLS/KEM 支持。

    • JVM 性能优化。

    • 模块导入声明(预览)。

Java 24(2025 年 3 月)

  • 安全与密码学

    • 密钥派生函数 API(预览)。

    • 完全禁用 Security Manager。

  • 性能与工具

    • 类加载与链接缓存。

    • 类文件 API 正式发布。

    • Stream::gather 正式发布。

  • 并发与内部改进

    • 作用域值第四次预览。

    • 虚拟线程同步无 Pinning。

    • jlink 无需 JMOD 文件。

  • 预览/孵化

    • 字符串模板第二次预览。

    • 隐式类导入(预览)。

相关推荐
苍煜41 分钟前
Maven构建流程详解:如何正确管理微服务间的依赖关系-当依赖的模块更新后,我应该如何重新构建主项目
java·微服务·maven
冼紫菜44 分钟前
[特殊字符]CentOS 7.6 安装 JDK 11(适配国内服务器环境)
java·linux·服务器·后端·centos
isyangli_blog1 小时前
(1-4)Java Object类、Final、注解、设计模式、抽象类、接口、内部类
java·开发语言
緈福的街口1 小时前
【leetcode】2900. 最长相邻不相等子序列 I
算法·leetcode·职场和发展
秋野酱2 小时前
Spring Boot 项目的计算机专业论文参考文献
java·spring boot·后端
士别三日&&当刮目相看2 小时前
数据结构*优先级队列(堆)
java·数据结构
香饽饽~、2 小时前
【第二篇】 初步解析Spring Boot
java·spring boot·后端
坎布里奇3 小时前
java -jar命令运行 jar包时如何运行外部依赖jar包
java·pycharm·jar
冷yan~3 小时前
GitHub文档加载器设计与实现
java·人工智能·spring·ai·github·ai编程