Java 17 新特性笔记

Java 17 是一个 长期支持版本(LTS) ,于 2021 年 9 月发布,是继 Java 11 之后的重要里程碑。它整合了 Java 12~16 的众多特性,并引入新的语言增强、JDK API 改进、性能优化和安全增强。


Java 17 版本信息


一、语言特性增强

1. 封闭类(Sealed Classes)】

作用

限制哪些类可以继承某个类,提升安全性和建模能力。

使用方式
java 复制代码
public sealed class Shape
    permits Circle, Rectangle, Square {}

final class Circle extends Shape {}
final class Rectangle extends Shape {}
final class Square extends Shape {}
修饰符说明
  • sealed:定义封闭类
  • permits:指定允许的子类
  • 子类必须是 finalsealednon-sealed

2. Switch 增强(Pattern Matching for switch 的预览)

Java 17 引入了对 switch 语句匹配模式的预览支持,允许对类型进行更灵活的判断。

java 复制代码
static String formatter(Object o) {
    return switch (o) {
        case Integer i -> "Integer: " + i;
        case Long l    -> "Long: " + l;
        case String s  -> "String: " + s.toUpperCase();
        default        -> "Unknown";
    };
}

3. instanceof 模式匹配(正式)

instanceof 和强制类型转换整合为一种简洁语法。

Java 11 写法:
java 复制代码
if (obj instanceof String) {
    String s = (String) obj;
    System.out.println(s.length());
}
Java 17 写法:
java 复制代码
if (obj instanceof String s) {
    System.out.println(s.length());
}

二、JDK API 改进

1. 强封装 JDK 内部 API

说明:

移除了对大部分 sun.miscjdk.internal.* 等内部包的默认访问。

目的:提升模块安全

影响:旧项目需改为使用标准 API 或反射白名单处理。


2. 新的 RandomGenerator 接口

引入统一的随机数生成框架,支持多种算法。

java 复制代码
RandomGenerator gen = RandomGenerator.of("L64X256MixRandom");
int val = gen.nextInt();

新增类包括:

  • RandomGenerator
  • RandomGeneratorFactory
  • SplittableRandom
  • Xoroshiro128PlusPlus

3. Foreign Function & Memory API(孵化)

用于调用本地函数(如 C 语言库)并安全地操作内存。

取代 JNI 更安全、易用:

java 复制代码
MemorySegment segment = MemorySegment.allocateNative(100, ResourceScope.newConfinedScope());

4. Vector API(孵化)

支持 SIMD 矢量计算,提高性能。

用途:图像处理、机器学习、大数据运算等。


5. Deprecate and Remove RMI Activation

废弃并移除过时的 RMI 激活机制,鼓励使用现代 RPC 框架。


三、已删除的旧特性

删除内容 说明
Applet API Applet 被彻底移除
RMI Activation 过时,已废弃
Experimental AOT 和 JIT Compiler 移除 Graal 编译器的实验支持
Security Manager 计划在未来版本中移除,当前已被弃用(JEP 411)

四、JVM 与性能改进

1. ZGC 和 Shenandoah 正式稳定

  • ZGC(低延迟 GC)和 Shenandoah 垃圾回收器现已正式稳定。

  • 使用方式:

    shell 复制代码
    java -XX:+UseZGC MyApp
    java -XX:+UseShenandoahGC MyApp

五、跨版本特性整合(Java 12~16)

Java 17 还包含了前几个版本中引入的重要功能:

版本 特性
Java 12 Switch 表达式(预览)
Java 14 Record 类(预览)
Java 15 Text Blocks 正式推出
Java 16 RecordPattern Matching 的改进
Java 17 将部分预览特性正式化

总结

特性 状态 说明
封闭类(Sealed Classes) 正式 增强类型控制
instanceof 模式匹配 正式 简化类型检查
switch 模式匹配 预览 更灵活的分支
新 Random API 正式 更丰富的随机算法
Foreign Memory API 孵化 高效替代 JNI
Vector API 孵化 支持 SIMD 运算
Applet 移除 删除 不再支持 Applet
RMI 激活移除 删除 不推荐使用 RMI
安全管理器弃用 弃用 将被完全移除

参考资料

相关推荐
float_六七7 分钟前
IntelliJ IDEA双击Ctrl的妙用
java·ide·intellij-idea
能摆一天是一天1 小时前
JAVA stream().flatMap()
java·windows
CodeCraft Studio2 小时前
PDF处理控件Aspose.PDF教程:使用 Python 将 PDF 转换为 Base64
开发语言·python·pdf·base64·aspose·aspose.pdf
零点零一2 小时前
VS+QT的编程开发工作:关于QT VS tools的使用 qt的官方帮助
开发语言·qt
wan5555cn2 小时前
多张图片生成视频模型技术深度解析
人工智能·笔记·深度学习·算法·音视频
颜如玉2 小时前
🤲🏻🤲🏻🤲🏻临时重定向一定要能重定向🤲🏻🤲🏻🤲🏻
java·http·源码
雁于飞3 小时前
vscode中使用git、githup的基操
笔记·git·vscode·学习·elasticsearch·gitee·github
程序员的世界你不懂3 小时前
【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇
java·前端·数据库
星空寻流年3 小时前
设计模式第一章(建造者模式)
java·设计模式·建造者模式
rannn_1114 小时前
【Javaweb学习|实训总结|Week1】html基础,CSS(选择器、常用样式、盒子模型、弹性盒布局、CSS定位、动画),js(基本类型、运算符典例)
css·笔记·学习·html