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


Java 17 版本信息

  • 发布时间:2021 年 9 月
  • 类型:LTS(长期支持)
  • 前一个 LTS:Java 11
  • JDK 编号:JEP 306~JEP 412 等
  • 官网文档:https://openjdk.org/projects/jdk/17/

一、语言特性增强

1. 封闭类(Sealed Classes)】

作用

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

使用方式
public sealed class Shapepermits 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
安全管理器弃用弃用将被完全移除

参考资料

  • OpenJDK JEPs
  • Oracle Java 17 Release Notes

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/913810.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/913810.shtml
英文地址,请注明出处:http://en.pswp.cn/news/913810.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WWDC 25 风云再起:SwiftUI 7 Charts 心法从 2D 到 3D 的华丽蜕变

概述 在 iOS 开发这个波谲云诡的江湖中,SwiftUI 可谓是一位后起之秀,以其简洁明快的招式迅速在 UI 框架领域中崭露头角。 而其中的 Charts 框架,更是如同江湖中的 “数据可视化宝典”那样,让各位秃头少侠们能够轻松将复杂的数据转…

Vue+Element Plus 中按回车刷新页面问题排查与解决

VueElement Plus 中按回车刷新页面问题排查与解决原因分析解决方案方法一:阻止默认行为 submit.prevent方法二:只监听回车并触发搜索最终推荐写法如下:在使用 Vue 3 Element Plus 开发后台系统时,我们常常会通过 搭配 实现搜索功…

x86汇编语言入门基础(三)汇编指令篇3 位移运算

位移运算指令:SHL逻辑移位,SAR算术移位, ROR循环右移 1. SHL 逻辑移位 Shift Left, SHL代表向左移位,SHR代表向右移位 指令格式:shl op1, op2 目的操作数 op1:寄存器/内存地址源操作数 op2:寄…

Java-69 深入浅出 RPC 单体架构 垂直架构 分布式架构 微服务架构

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) AI炼丹日志-29 - 字节跳动 DeerFlow 深度研究框斜体样式架 私有…

Android 如何阻止应用自升级

问题背景 1.打开PlayStore,然后登陆账户 2.退出应用过几分钟后,应用会自动更新到新版本 3.再次打开应用,问题即可复现 一联网进入playStore应用并且登录谷歌账号,退出几分钟,在进入,发现应用版本号更新了,应用进行了自我升级,关键是升级之后谷歌商店就用不了了,就…

Docker-构建镜像并实现LNMP架构

一、搭建LNMP基础配置1、制作Nginx镜像制作dockerfilevim dockerfileFROM centos:7 RUN rm -rf /etc/yum.repos.d/* RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo RUN yum clean all RUN yum makecache RUN yum -y install z…

Python之--基本知识

基本输出语法结构: print(输出内容)print()函数完整的语法格出: print (value,...,sep,end\n,fileNone)只有字符串可以用连接基本输入语法结构: xinput(提示文字’)注意事项: 无论输入的数据是什么 x 的数据类型都是字符串类型示例:name input("Enter your na…

VS CodeC51 单片机开发环境搭建

文章目录前言1.安装插件2.创建EIDE项目(51单片机)3.配置工具链(第一次使用需要配置)4.编译与下载5.项目文件简介与串口调试工具6.推荐插件7.打包模板与导出模板8.51单片机串口无法识别问题前言 需要安装keil c51版本需要配置好C/…

国密算法(SM2/SM3/SM4)

文章目录国密算法(SM2/SM3/SM4)详解:从性能对比到Java手机号安全处理实战一、 国密核心算法简介二、 性能深度对比三、 Java实战:手机号的安全处理方案一:使用SM3哈希存储(推荐用于验证场景)方案…

从前端转go开发的学习路线

从前端开发转向 Go(Golang)后端开发,是一个非常可行也很实用的方向,特别是在做 高性能微服务、分布式系统、云原生(如Kubernetes) 等方面。以下是一份适合你(有多年开发经验的前端开发者&#x…

node或浏览器上传文件到阿里云OSS

阿里云配置 进入阿里云OSS Bucket 列表的某个 Bucket 仓库下,点击访问控制 RAM 创建用户 勾上 创建 AccessKey ID 和 AccessKey Secret 复制 AccessKey 信息 用文档保存 创建角色 选择云账号 复制 ARN 用文档保存,然后 新增权限 搜索 oss 选择 AliyunOSS…

26考研物理复试面试常见问答问题汇总,物理专业保研推免夏令营面试问题汇总,物理本科知识专业面试最全攻略!

还在为物理考研复试面试发愁?还在为物理招聘的专业面试抓狂?还在为即将到来的物理夏令营面试不知从何下手、翻遍了厚厚的教材却抓不住重点?别慌,接下来我会从「考研的物理复试经历」「物理面试攻略」「物理面试基础问答题汇总很全…

(5)机器学习小白入门 YOLOv:数据需求与图像不足应对策略

(1)机器学习小白入门YOLOv :从概念到实践 (2)机器学习小白入门 YOLOv:从模块优化到工程部署 (3)机器学习小白入门 YOLOv: 解锁图片分类新技能 (4)机器学习小白入门YOLOv :图片标注实操手册 (5)机器学习小白入门 YOLOv:…

百年制造名企,三菱重工引领“智”造新范式

日前,由深圳软件协会指导、法大大和信息侠联合出品的《制造行业合同数智化升级白皮书》(以下简称“白皮书”)正式发布,并首次提出 “电子签法律AI” 双轮驱动模型。在制造行业面临供应链协同、合规风控及全球化出海等多重挑战的当…

【学习笔记】计算机操作系统(七)—— 文件管理

第七章 文件管理 文章目录第七章 文件管理7.1 文件和文件系统7.1.1 数据项、记录和文件7.1.2 文件名和类型7.1.3 文件系统的层次结构7.1.4 文件操作7.2 文件的逻辑结构7.2.1 文件逻辑结构的类型7.2.2 顺序文件(Sequential File)7.2.3 记录寻址7.2.4 索引文件(Index File)7.2.5 …

基于PyQt5与深度学习的可视化水果识别系统(集成CNN, MobileNetV2, VGG16)

一、项目概述 大家好!今天我将分享一个我近期完成的深度学习项目——一个功能强大的、带图形化界面(GUI)的水果识别系统。该系统不仅能识别静态图片中的水果,还集成了模型训练、评估、数据增强等功能于一体,为深度学习…

k8s-服务发布基础

目录 Service的定义 核心定义 Service 的类型 关键组件与机制 工作流程示例 高级特性 Service工作原理 核心工作原理 标签选择器(Label Selector) Endpoints 对象 网络代理与负载均衡(kube-proxy) userspace 模式&#…

洛谷P1514 [NOIP 2010 提高组] 引水入城

洛谷P1514 [NOIP 2010 提高组] 引水入城 洛谷题目传送门 题目背景 NOIP2010 提高组 T4 题目描述 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政区划十分特殊,刚好构成一个 NNN 行 MMM 列的矩形&#xff…

【unity小技巧】国内Unity6下载安装和一些Unity6新功能使用介绍

文章目录前言一、安装1、国外下载2、国内下载二、常用的新功能变化1、官方推荐使用inputsystem进行输入控制2、修复了InputSystem命名错误导致listen被遮挡的bug3、自带去除unity启动画面logo功能4、unity官方的behavior行为树插件5、linearVelocity代替过时的velocity方法6、随…

Rust 中字符串类型区别解析

在 Rust 中,"hello" 和 String::from("hello") 都表示字符串,但它们在内存表示、所有权和可变性上有本质区别:1. 类型与内存表示"hello" (字符串字面量):类型为 &str(字符串切片引用…