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

参考资料

相关推荐
啊我不会诶5 分钟前
倍增法和ST算法 个人学习笔记&代码
笔记·学习·算法
逼子格19 分钟前
振荡电路Multisim电路仿真实验汇总——硬件工程师笔记
笔记·嵌入式硬件·硬件工程·硬件工程师·硬件工程师真题·multisim电路仿真·震荡电流
三体世界27 分钟前
TCP传输控制层协议深入理解
linux·服务器·开发语言·网络·c++·网络协议·tcp/ip
Java技术小馆29 分钟前
langChain开发你的第一个 Agent
java·面试·架构
kangkang-30 分钟前
PC端基于SpringBoot架构控制无人机(二):MavLink协议
java·spring boot·后端·无人机
Dcs42 分钟前
Anthropic 爆严重安全漏洞!程序员机器沦陷
java
一条破秋裤42 分钟前
一份多光谱数据分析
笔记·数据挖掘·数据分析
随心点儿1 小时前
使用python 将多个docx文件合并为一个word
开发语言·python·多个word合并为一个
zstar-_1 小时前
【算法笔记】6.LeetCode-Hot100-链表专项
笔记·算法·leetcode
不学无术の码农1 小时前
《Effective Python》第十三章 测试与调试——使用 Mock 测试具有复杂依赖的代码
开发语言·python