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

参考资料

相关推荐
冷雨夜中漫步36 分钟前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
JH30732 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
m0_736919103 小时前
C++代码风格检查工具
开发语言·c++·算法
Coder_Boy_3 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
2501_944934733 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
Gain_chance3 小时前
34-学习笔记尚硅谷数仓搭建-DWS层最近一日汇总表建表语句汇总
数据仓库·hive·笔记·学习·datagrip
invicinble3 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
较真的菜鸟3 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖3 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
Gain_chance4 小时前
36-学习笔记尚硅谷数仓搭建-DWS层数据装载脚本
大数据·数据仓库·笔记·学习