Java 17 新特性笔记

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


Java 17 版本信息


一、语言特性增强

1. 封闭类(Sealed Classes)】

作用

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

使用方式
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 语句匹配模式的预览支持,允许对类型进行更灵活的判断。

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 写法:
if (obj instanceof String) {
    String s = (String) obj;
    System.out.println(s.length());
}
Java 17 写法:
if (obj instanceof String s) {
    System.out.println(s.length());
}

二、JDK API 改进

1. 强封装 JDK 内部 API

说明:

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

目的:提升模块安全
影响:旧项目需改为使用标准 API 或反射白名单处理。


2. 新的 RandomGenerator 接口

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

RandomGenerator gen = RandomGenerator.of("L64X256MixRandom");
int val = gen.nextInt();

新增类包括:

  • RandomGenerator
  • RandomGeneratorFactory
  • SplittableRandom
  • Xoroshiro128PlusPlus

3. Foreign Function & Memory API(孵化)

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

取代 JNI 更安全、易用:

MemorySegment segment = MemorySegment.allocateNative(100, ResourceScope.newConfinedScope());

4. Vector API(孵化)

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

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


5. Deprecate and Remove RMI Activation

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


三、已删除的旧特性

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

四、JVM 与性能改进

1. ZGC 和 Shenandoah 正式稳定

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

  • 使用方式:

    java -XX:+UseZGC MyApp
    java -XX:+UseShenandoahGC MyApp
    

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

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

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

总结

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

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值