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:指定允许的子类
  • 子类必须是 final、sealed 或 non-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.misc、jdk.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 Record 和 Pattern Matching 的改进
Java 17 将部分预览特性正式化

总结

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

参考资料

相关推荐
泡茶喝茶写代码4 小时前
A股量化数据工程:从 REST 接口到策略信号(第 8 篇):成长能力因子:营收与利润增速
java·python·股票数据api·股票数据api接口·股票量化数据api·股票量化数据接口·股票数据api数据
搭贝4 小时前
上厕所的时间搭好一套系统:AI自动生成实测
开发语言·人工智能·低代码·ai·php·搭贝
智感子4 小时前
智能称重·数据上云:从仪表读数到可追溯的计量凭证
开发语言·php
Seraphina364 小时前
SQL注入(二)盲注
网络·数据库·经验分享·笔记·sql
白山编程大哥4 小时前
Carsim 2024.1 专业安装介绍:功能特性与应用场景详解
笔记
\光辉岁月/4 小时前
7.javase-面向对象
java·开发语言
hss123456785 小时前
整装落地与效果图差距有多大?从毫米级误差到ENF板材的量化拆解
笔记
weixin_531094695 小时前
heap_4内存管理
java·开发语言·算法
疯狂的维修5 小时前
关于用C#写电机起保停控制
开发语言·c#
程序员南飞5 小时前
win系统安装minio
java·数据结构·算法