JDK JDK 学习手册8 → 27 · JDK 专用学习站
JDK 17 · LTS · 2021-09-14 · 完整课程

JDK 17:record、sealed 与强封装,把 17 作为长期基线

JDK 17 是 8 / 11 之后的 LTS,也是很多团队从 8 / 11 升级的实际落点:record、sealed、instanceof 模式、switch 表达式与文本块在这里都已转正,JDK 内部 API 则从「默认拒绝」变成「一律拒绝」。它既是语言表达力的分水岭,也是运行时边界收紧的一代。

速查 6 主题深钻 3 主题面试 15 题速查卡 12 张class 版本 61
已掌握 0 / 0 个学习单元
在任意速查 / 深钻页底部标记

这一课,你必须能自己回答GOALS

合上资料后,逐条自述

  1. record 自动生成了哪些成员?紧凑构造器在什么时候执行,为什么不能写 this.x = x?
  2. sealed 的 permits 与 final / sealed / non-sealed 是什么关系?它如何让穷尽性成为可能?
  3. instanceof 模式变量为什么能进入 && 右侧,却不能进入 || 右侧?
  4. switch 表达式与 switch 语句的差别是什么?yield、穷尽性和 null 分别怎么处理?
  5. 文本块的附带空白如何计算?\s 与行尾 \ 各解决什么问题?
  6. JDK 17 的强封装改变了什么?--add-opens 与 --add-exports 分别适用于什么场景?
  7. G1、ZGC、Shenandoah 的取舍是什么?为什么「低停顿」不等于「更快」?
  8. 从 8 / 11 升到 17,哪些移除项、弃用项和 JVM 参数必须先处理?
验收方式:不是「看过」,而是能用自己的话讲出因果、举出代码例子、说出至少一个版本边界或反例。每个深钻单元最后的费曼自检就是按这个标准设计的。

三种模式,各解决一个问题MODES

学习路径TRACKS

面试突击 · 90 分钟

先结论后机制

先刷高频题暴露盲区,再回到速查补齐 API 与版本边界。重点盯住 17 与 21 的差异:switch 类型模式、record pattern、Security Manager。

语言升级 · 1 天

从旧写法迁移

按「record → sealed → instanceof 模式 → switch 表达式 → 文本块」顺序改造代码,最后用 sealed + 预览 switch 写一次 ADT,理解穷尽性到底由谁保证。

升级与运行时 · 1 天

强封装 + GC

升级到 17 的真正成本在运行时假设:--illegal-access 失效、反射访问 JDK 内部包失败、Security Manager 只是弃用。把迁移清单与 GC 选择放在一起做。

换一个版本,继续同一门课SWITCH

所有完整课程共用「速查 → 深钻 → 面试」结构。切换版本后,再从顶栏版本菜单切一次,就会落在目标版本的同一模块。

全部学习单元9

速查模块 · 6 个主题

01

record:透明数据载体

record 用一行声明描述一组值:字段、访问器、equals/hashCode/toString 都由编译器生成。它的价值是「透明」——你能从声明直接读出对象状态,也因此不适合承载隐藏状态或复杂生命周期。

18 分钟核心
02

sealed:封闭类型集合

sealed 把「只允许这几个实现」从注释变成编译器可检查的约束。它不改变多态,也不做访问控制;真正的收益是让类型集合在编译期闭合,从而支撑穷尽性检查。

20 分钟核心
03

instanceof 模式:判断与绑定合并

instanceof 模式把类型判断和变量声明合并,省掉强转。它的关键是流作用域:变量只在编译器能证明匹配成功的路径上可见,而不是简单的块作用域。

12 分钟基础
04

switch 表达式:让分支返回值

switch 从语句变成表达式后,分支可以直接产出值,箭头标签取消贯穿,编译器还会检查穷尽性。它最适合 enum、有限集合和纯映射逻辑;复杂控制流仍应留在语句里。

15 分钟基础
05

文本块:多行字符串的可读写法

文本块把 SQL、JSON、HTML 从字符串拼接里解放出来,但它的规则不是「原样保留」:编译器会去掉附带空白,行尾空格和缩进都会影响结果。

15 分钟基础
06

从 8 / 11 迁移到 17

升级到 17 的主要成本不在新语法,而在旧假设:被移除的 RMI Activation、失效的 --illegal-access、对 JDK 内部 API 的反射访问,以及只在 21 才改变的 Security Manager 行为。

25 分钟进阶

深钻模块 · 3 个主题

版本上下文JDK 17

JDK 17 于 2021-09-14 发布,class 文件版本 61,默认 G1。语言侧的五个特性跨越 14–17 转正;运行时侧的 JEP 403 强封装、JEP 407 移除 RMI Activation、JEP 411 弃用 Security Manager 决定了升级成本。ZGC 与 Shenandoah 在 15 已转正,17 可以直接使用。

Sealed Classes 转正Switch 模式匹配(预览)强封装 JDK 内部增强型伪随机数生成器移除 RMI Activation弃用 Security Manager
版本边界提醒:record、sealed、instanceof 模式、switch 表达式、文本块在 17 是正式能力;switch 的类型模式匹配(JEP 406)在 17 仍是预览,编译和运行都要 --enable-preview,守卫语法是 &&,不是 21 的 when。record pattern 在 17 连预览都没有。ZGC 与 Shenandoah 已转正,但分代 ZGC 要等到 21。

查看 JDK 17 完整版本档案(全部 JEP、移除项)→ · 查看跨版本演进矩阵 →

JDK 学习手册 · JDK / Java 专用学习站 · 纯静态 · 双击 index.html 即可使用

本站专注 JDK 版本演进与 Java 教学,非 Oracle / OpenJDK 官方站点。版本数据来自 OpenJDK 官方 Features 表;课程示例已在对应本机 JDK 实测。构建日期 2026-11-12。