
資料內(nèi)容:
概述 
據(jù) Oracle Java SE 支持路線圖顯示,JDK 17 是自 Java 11 以來(lái)的首個(gè)長(zhǎng)期支持 
版本。對(duì)于 JDK 17,Oracle 官宣會(huì)提供支持到 2029 年,這給了業(yè)界一個(gè)相 
當(dāng)長(zhǎng)的期許。 
新特性 
Java 17 的 14 個(gè) 新特性,分別是: 
? 306:恢復(fù)始終嚴(yán)格的浮點(diǎn)語(yǔ)義 
? 356:增強(qiáng)型偽隨機(jī)數(shù)發(fā)生器 
? 382:新的 macOS 渲染管道 
? 391:macOS/AArch64 端口 
? 398:棄用即將刪除的 Applet API 
? 403:強(qiáng)封裝 JDK 的內(nèi)部 API 
? 406:Switch 模式匹配(預(yù)覽) 
? 407:刪除 RMI 激活 
? 409:密封類 
? 410:刪除實(shí)驗(yàn)性 AOT 和 JIT 編譯器 
? 411:棄用即將刪除安全管理器 
? 412:外部函數(shù)和內(nèi)存 API(孵化器) 
? 414:Vector API(第二次進(jìn)行特性孵化) 
? 415:特定于上下文的反序列化過(guò)濾器
密封類(Sealed Class) 
Jdk17 之前的版本帶有 final 修飾符的類是不能繼承的,那如果有些情況,我們還是希望能 
擴(kuò)展類的功能,但是限制只有某些類能繼承呢?在 Java 15 和 16 中引入了 Sealed Class 
的功能預(yù)覽,在 Java 17 中作為標(biāo)準(zhǔn)功能提供。Sealed Class 只允許特定的類繼承。 
// 只允許 Bicycle, Car, Truck 繼承 
public abstract sealed class Vehicle permits Bicycle, Car, Truck {...} 
// Car 帶有 final 修飾符,防止進(jìn)一步擴(kuò)展 
public final class Car extends Vehicle {...} 
// Truck 帶有 sealed 修飾符,只允許特定的類繼承public sealed class Truck extends Vehicle permits PickTruck, CyberTruck {...} 
// Bicycle 帶有 non-sealed 修飾符,任何類都可以繼續(xù)擴(kuò)展 
public non-sealed class Bicycle extends Vehicle {...} 
// 任意擴(kuò)展 Bicycle 類 
public class Motor extends Bicycle {...} 
使用 Sealed Class 還有幾點(diǎn)注意事項(xiàng): 
? 被許可的子類,必須在編譯時(shí)能被父類訪問(wèn)到。 
? 被許可的子類,必須直接繼承 Sealed 父類。 
? 被許可的子類,必須帶有 final,sealed,non-sealed 三個(gè)修飾符之一。 
? 被許可的子類必須在同一個(gè) Java 模塊中。 
JDK 內(nèi)部元素強(qiáng)封裝 
很多程序員以損害安全性和可維護(hù)性的方式使用 JDK 的內(nèi)部元素比如一些非 public 類、方 
法和字段。為了繼續(xù)提高 JDK 的安全性和可維護(hù)性,默認(rèn)強(qiáng)封裝 JDK 的所有內(nèi)部元素,從 
而限制對(duì)它們的訪問(wèn),除了關(guān)鍵的內(nèi)部 API 如 sun.misc.Unsafe。 
 
                