自Java 8以来,Java平台在每个版本中都引入了许多新特性和改进。以下是Java 9到Java 20的主要新特性概述:

Java 9

  • 模块系统(Project Jigsaw):引入模块化系统(Java Platform Module System),允许在JDK、JRE和应用程序级别组织代码。
  • JShell:交互式的Java REPL(Read-Eval-Print Loop),方便快速测试和学习Java代码。
  • 多版本兼容 JAR 文件:允许在同一个JAR文件中包含多个版本的类文件,支持不同的Java平台版本。

Java 10

  • 局部变量类型推断:引入 var 关键字,允许编译器推断局部变量的类型。
  • 并行全GC:G1垃圾收集器现在可以并行执行Full GC。

Java 11(LTS)

  • Lambda参数的局部变量语法:允许在Lambda表达式中使用var
  • HTTP Client:标准化的 HTTP Client API,用于发送HTTP请求和处理响应。
  • 单文件源代码程序:允许直接运行单个Java源文件。
  • 弃用和移除:移除了Java EE和CORBA模块。

Java 12

  • Switch表达式(预览):增强的switch语句支持作为表达式使用,简化代码。
  • 垃圾收集改进:引入Shenandoah低暂停时间垃圾收集器。
  • Microbenchmark Suite:为JDK提供了一组微基准测试。

Java 13

  • 文本块(预览):多行字符串文字,简化了跨行字符串的操作。
  • Switch表达式(第二次预览):进一步改进switch表达式的功能。

Java 14

  • Switch表达式:正式成为标准特性。
  • 记录(预览):引入记录类型,简化数据类的创建。
  • 文本块(第二次预览):进一步改进文本块功能。
  • 包装类和控制流分析的模式匹配(预览):简化条件语句中的类型检查和转换。

Java 15

  • 文本块:正式成为标准特性。
  • 隐藏类:为框架和库生成隐藏类提供支持。
  • 密封类(预览):允许限制哪些类可以扩展或实现密封类。
  • 外部内存访问API(孵化器):为Java程序提供安全的外部内存访问。

Java 16

  • 记录:正式成为标准特性。
  • 密封类(第二次预览):进一步改进密封类功能。
  • 外部内存访问API(孵化器):进一步改进外部内存访问API。
  • 模式匹配 for instanceof:简化了instanceof操作的类型转换。

Java 17 (LTS)

  • 密封类(Sealed Classes):正式成为标准特性,允许限制哪些类可以扩展或实现密封类。
  • **模式匹配 for instanceof**:简化了通过 instanceof 操作符进行类型检查和转换的代码。
  • 增强的Switch表达式:进一步增强了 switch 表达式,增加了模式匹配功能。
  • 强封装(Strong Encapsulation):默认情况下模块的强封装得到增强,限制了对模块内部实现细节的访问。
  • 移除RMI激活:移除了Java RMI激活机制。
  • **Foreign Function & Memory API (孵化器)**:提供了一种更安全和高效的方式来访问本地代码和内存。

Java 18

  • UTF-8默认字符编码:Java标准编码默认设置为UTF-8,确保字符编码的一致性。
  • 简单Web服务器:提供了一个简单的嵌入式Web服务器,用于测试和开发。
  • **Vector API (第二次孵化)**:允许开发者使用向量运算进行高性能计算。
  • **代码段API (孵化)**:提供了一个API来处理、操作和格式化代码段。
  • **Foreign Function & Memory API (第二次孵化)**:进一步改进和增强了外部函数和内存访问API。

Java 19

  • 虚拟线程(预览):Project Loom的一部分,提供轻量级线程,极大地提升了并发性能。
  • 结构化并发(预览):简化并发编程,提供了更直观的并发处理模型。
  • **外部函数 & 内存 API (第三次预览)**:继续改进外部函数和内存访问API。
  • 模式匹配 for switch(预览):进一步增强 switch 表达式,支持模式匹配。

Java 20

  • 虚拟线程(第二次预览):继续改进和优化虚拟线程功能。
  • 结构化并发(第二次预览):进一步增强结构化并发模型。
  • **外部函数 & 内存 API (第四次预览)**:进一步改进外部函数和内存访问API。
  • 模式匹配 for switch(第二次预览):进一步增强 switch 表达式中的模式匹配功能。
  • 记录模式(预览):引入记录模式,简化对记录类型的解构和匹配。