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
安全管理器弃用 弃用 将被完全移除

参考资料

相关推荐
你喜欢喝可乐吗?4 分钟前
RuoYi-Cloud ruoyi-gateway 网关模块
java·spring cloud·gateway
谢娘蓝桥14 分钟前
[Xmos] Xmos架构
开发语言·架构·xmos
yi.Ist20 分钟前
数据结构 —— 栈(stack)在算法思维中的巧妙运用
开发语言·数据结构
典孝赢麻崩乐急25 分钟前
Java学习---JVM(1)
java·jvm·学习
[纳川]31 分钟前
把word中表格转成excle文件
开发语言·c#·word
m0_5973453134 分钟前
【Android】安卓四大组件之广播接收器(Broadcast Receiver):从基础到进阶
android·java·boradcast·安卓四大组件
程序员的世界你不懂35 分钟前
基于Java+Maven+Testng+Selenium+Log4j+Allure+Jenkins搭建一个WebUI自动化框架(5)失败用例截图与重试
java·selenium·maven
半导体守望者35 分钟前
ADVANTEST R4131 SPECTRUM ANALYZER 光谱分析仪
经验分享·笔记·功能测试·自动化·制造
喧星Aries1 小时前
进程调度的时机,切换与过程方式(操作系统OS)
java·服务器·前端·操作系统·进程调度