就在昨晚,Java 22正式發(fā)布!該版本提供了 12 項(xiàng)功能增強(qiáng),其中包括 7 項(xiàng)預(yù)覽功能和 1 項(xiàng)孵化器功能。它們涵蓋了對 Java 語言、API、性能以及 JDK 中包含的工具的改進(jìn)。
下面就來一起學(xué)習(xí)一下該版本都更新了哪些新特性!
Unnamed Variables & Patterns - JEP 456
JEP 456 - 未命名變量和模式:當(dāng)需要但未使用變量聲明或嵌套模式時,提高了可讀性。兩者都由下劃線字符表示。
價值
- 捕獲開發(fā)人員的意圖,即未使用給定的綁定或 lambda 參數(shù),并強(qiáng)制執(zhí)行該屬性以澄清程序并減少出錯的機(jī)會。
- 通過識別必須聲明(例如,在 catch 子句中)但未使用的變量,提高所有代碼的可維護(hù)性。
- 允許多個模式出現(xiàn)在單個 case 標(biāo)簽中,如果它們都沒有聲明任何模式變量。
- 通過消除不必要的嵌套類型模式來提高記錄模式的可讀性。
Statements before super (…) [Preview] - JEP 447
在構(gòu)造函數(shù)中,允許不引用正在創(chuàng)建的實(shí)例的語句出現(xiàn)在顯式構(gòu)造函數(shù)調(diào)用之前。
價值
- 為開發(fā)人員提供了更大的自由來表達(dá)構(gòu)造函數(shù)的行為,從而可以更自然地放置目前必須納入輔助靜態(tài)方法、輔助中間構(gòu)造函數(shù)或構(gòu)造函數(shù)參數(shù)中的邏輯。
- 保留構(gòu)造函數(shù)在類實(shí)例化期間按自上而下順序運(yùn)行的現(xiàn)有保證,確保子類構(gòu)造函數(shù)中的代碼不會干擾超類實(shí)例化。
- 不需要對 Java 虛擬機(jī)進(jìn)行任何更改。此 Java 語言功能僅依賴于 JVM 驗(yàn)證和執(zhí)行構(gòu)造函數(shù)中顯式構(gòu)造函數(shù)調(diào)用之前出現(xiàn)的代碼的當(dāng)前能力。
String Templates (2nd Preview) - JEP 459
字符串模版的第2個預(yù)覽版,關(guān)于該功能之前DD給大家介紹過,更多細(xì)節(jié)可以看看之前的這篇文章String Templates(字符串模版)
價值
- 通過輕松表達(dá)包含運(yùn)行時計算值的字符串,簡化了 Java 程序的編寫。
- 增強(qiáng)混合文本和表達(dá)式的表達(dá)式的可讀性,無論文本適合單個源行(如字符串文字)還是跨越多個源行(如文本塊)。
- 通過支持模板及其嵌入表達(dá)式的值的驗(yàn)證和轉(zhuǎn)換,提高 Java 程序的安全性,這些程序從用戶提供的值組成字符串并將其傳遞到其他系統(tǒng)(例如,構(gòu)建數(shù)據(jù)庫查詢)。
- 通過允許 Java 庫定義字符串模板中使用的格式化語法來保留靈活性。
- 簡化了接受非 Java 語言(例如 SQL、XML 和 JSON)編寫的字符串的 API 的使用。
- 允許創(chuàng)建根據(jù)文字文本和嵌入表達(dá)式計算的非字符串值,而無需通過中間字符串表示形式進(jìn)行傳輸。
Implicitly Declared Classes and Instance Main Methods (2nd Preview) - JEP 463
隱式聲明的類和實(shí)例主要方法(2nd 預(yù)覽)- JEP 463
學(xué)生可以編寫他們的第一個 Java 程序,而無需了解為大型程序設(shè)計的語言功能。學(xué)生無需使用單獨(dú)的語言方言,而是可以為單類程序編寫簡化的聲明,然后隨著技能的增長無縫擴(kuò)展他們的程序以使用更高級的功能。關(guān)于該特性,之前DD也介紹過,更多細(xì)節(jié)可見這篇文章未命名類和實(shí)例的Main方法
價值
- 加速 Java 學(xué)習(xí)
- 為 Java 編程提供了一個平滑的入門通道,以便教師可以循序漸進(jìn)地介紹概念。
- 幫助學(xué)生以簡潔的方式編寫基本程序,并隨著他們的技能增長而優(yōu)雅地擴(kuò)展他們的代碼。
- 減少編寫簡單程序(例如:腳本和命令行實(shí)用程序)的方式。
- 不引入單獨(dú)的初學(xué)者工具鏈;學(xué)生程序應(yīng)該使用與編譯和運(yùn)行任何 Java 程序相同的工具來編譯和運(yùn)行。
Foreign Function & Memory API - JEP 454
外部函數(shù)和內(nèi)存 API - JEP 454
允許 Java 程序與 Java 運(yùn)行時之外的代碼和數(shù)據(jù)進(jìn)行互操作。通過有效地調(diào)用外部函數(shù)(即 JVM 外部的代碼),并安全地訪問外部內(nèi)存(即不受 JVM 管理的內(nèi)存),API 使 Java 程序能夠調(diào)用本機(jī)庫并處理本機(jī)數(shù)據(jù),而不會出現(xiàn)脆弱性和危險。 JNI。
價值
- 生產(chǎn)力:用簡潔、可讀且純 Java API 取代脆弱的本機(jī)方法和 Java 本機(jī)接口 (JNI)。
- 性能:提供對外部函數(shù)和內(nèi)存的訪問,其開銷與 JNI 和 sun.misc.Unsafe 相當(dāng)(如果不是更好的話)。
- 廣泛的平臺支持:允許在 JVM 運(yùn)行的每個平臺上發(fā)現(xiàn)和調(diào)用本機(jī)庫。
- 一致性:提供在多種內(nèi)存(例如本機(jī)內(nèi)存、持久內(nèi)存和托管堆內(nèi)存)中操作無限大小的結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)的方法。
- 健全性:保證沒有釋放后使用錯誤,即使在多個線程之間分配和釋放內(nèi)存時也是如此。
- 完整性:允許程序使用本機(jī)代碼和數(shù)據(jù)執(zhí)行不安全的操作,但默認(rèn)警告用戶此類操作。
Class-File API (Preview) - JEP 457
類文件 API(預(yù)覽版)- JEP 457,提供用于解析、生成和轉(zhuǎn)換 Java 類文件的標(biāo)準(zhǔn) API。
價值
- 該API允許依賴它的框架和程序自動支持最新JDK中的最新類文件,以便可以快速、輕松地采用以類文件表示的新語言和VM功能。
Stream Gatherers (Preview) - JEP 461
Stream Gatherers(預(yù)覽版)- JEP 461,增強(qiáng)了 Stream API 以支持自定義中間操作。這將允許流管道以現(xiàn)有內(nèi)置中間操作不易實(shí)現(xiàn)的方式轉(zhuǎn)換數(shù)據(jù)。
價值
- 通過使流中的常見自定義操作更加靈活和富有表現(xiàn)力,提高開發(fā)人員的工作效率和代碼可讀性。盡可能允許中間操作操作無限大小的流。
Structured Concurrency (2nd Preview) - JEP 462
結(jié)構(gòu)化并發(fā)(2nd 預(yù)覽版)- JEP 462,簡化并發(fā)編程。結(jié)構(gòu)化并發(fā)將在不同線程中運(yùn)行的相關(guān)任務(wù)組視為單個工作單元,從而簡化錯誤處理和取消、提高可靠性并增強(qiáng)可觀察性。
價值
- 通過推廣一種編程風(fēng)格來簡化并發(fā)代碼的開發(fā),這種編程風(fēng)格可以消除因取消和關(guān)閉而產(chǎn)生的常見風(fēng)險(例如線程泄漏和取消延遲),并提高并發(fā)代碼的可觀察性。
Scoped Values (2nd Preview) - JEP 464
范圍值(2nd 預(yù)覽)- JEP 464,實(shí)現(xiàn)線程內(nèi)和線程間不可變數(shù)據(jù)的高效共享。
價值
- 易于使用 - 提供一個編程模型來在線程內(nèi)以及與子線程共享數(shù)據(jù),以簡化有關(guān)數(shù)據(jù)流的推理。
- 可理解性——使共享數(shù)據(jù)的生命周期從代碼的語法結(jié)構(gòu)中可見。
- 魯棒性——確保調(diào)用者共享的數(shù)據(jù)只能由合法的被調(diào)用者檢索。
- 性能——將共享數(shù)據(jù)視為不可變,以允許大量線程共享,并實(shí)現(xiàn)運(yùn)行時優(yōu)化。
Vector API (7th Incubator) - JEP 460
矢量 API(7th 孵化器)- JEP 460,一個用于表達(dá)向量計算的 API,可在運(yùn)行時可靠地在支持的 CPU 架構(gòu)上編譯為最佳向量指令,從而實(shí)現(xiàn)優(yōu)于等效標(biāo)量計算的性能。此 JEP 建議在 JDK 22 中重新孵化該 API,相對于JDK 21。該實(shí)現(xiàn)包括錯誤修復(fù)和性能增強(qiáng)。我們包括以下顯著變化:
- 支持使用任何原始元素類型的數(shù)組支持的堆 MemorySegments 進(jìn)行向量訪問。以前的訪問僅限于由字節(jié)數(shù)組支持的堆 MemorySegment。
價值
- 提供清晰簡潔的 API,能夠清晰簡潔地表達(dá)各種向量計算,這些向量計算由循環(huán)內(nèi)組成的向量運(yùn)算序列組成,并且可能還包含控制流。
- 該 API 設(shè)計為與 CPU 架構(gòu)無關(guān),可在支持向量指令的多種架構(gòu)上實(shí)現(xiàn)。
- 在 x64 和 AArch64 架構(gòu)上提供可靠的運(yùn)行時編譯和性能。
Regional Pinning for G1 - JEP 423
G1 的區(qū)域固定 - JEP 423,通過在 G1 中實(shí)現(xiàn)區(qū)域固定來減少延遲,以便在 Java 本機(jī)接口 (JNI) 關(guān)鍵區(qū)域期間無需禁用垃圾收集。
價值
- 使用 JNI 時,Java 線程無需在 G1 GC 操作完成之前等待,從而提高開發(fā)人員的工作效率。
Launch Multi-File Source-Code Programs - JEP 458
啟動多文件源代碼程序 - JEP 458,允許用戶運(yùn)行作為多個 Java 源代碼文件提供的程序,而無需先進(jìn)行編譯。
價值
- 通過使從小程序到大型程序的過渡更加漸進(jìn),提高開發(fā)人員的工作效率,使開發(fā)人員能夠選擇是否以及何時配置構(gòu)建工具。
- 請注意,預(yù)覽功能已完全指定并完全實(shí)現(xiàn)了 Java SE 平臺的語言或 VM 功能,但它們是暫時的。它們在 JDK 功能版本中提供,以便開發(fā)人員根據(jù)實(shí)際使用情況提供反饋,然后再在未來版本中永久保留。這也為工具供應(yīng)商提供了在最終確定為 Java SE 標(biāo)準(zhǔn)之前致力于支持功能的機(jī)會。
- 孵化器模塊中的 API 將非最終 API 和非最終工具交給開發(fā)人員和用戶,以收集反饋,最終提高 Java 平臺的質(zhì)量。
- 除了 JEP 中描述的更改之外,發(fā)行說明中還列出了許多較小的更新,許多應(yīng)用程序開發(fā)人員和系統(tǒng)管理員都會對此感興趣。其中包括棄用過時的 API 和刪除以前棄用的 API。
其他更新
Java 22 發(fā)行說明中還有??一些其他關(guān)鍵更新:
- 向 keytool 和 jarsigner 添加附加算法。
- 垃圾收集器吞吐量的提高,尤其是與“年輕”垃圾相關(guān)的情況。
- 更好的系統(tǒng)模塊描述符版本報告。
- 改進(jìn)了本機(jī)代碼的“wait”處理選項(xiàng)。
- Unicode 通用區(qū)域設(shè)置數(shù)據(jù)存儲庫已更新至版本 44。
- 類型注釋支持從字節(jié)碼加載的類型。
- ForkJoinPool 和 ForJoinTasks 現(xiàn)在可以更好地處理不間斷任務(wù)。
- 配置客戶端與服務(wù)器 TLS 連接屬性的額外靈活性。
- 改進(jìn)了本機(jī)內(nèi)存跟蹤,包括報告峰值使用情況的能力
最后注意:JDK 22 是通過六個月的發(fā)布節(jié)奏按時交付的 13th 功能版本。由于預(yù)期改進(jìn)源源不斷,這種程度的可預(yù)測性使開發(fā)人員能夠輕松管理創(chuàng)新的采用。Oracle 不會為 JDK 22 提供長期支持,在 2023 年 9 月之前提供更新,之后它將被 Oracle JDK 23 取代。最近的長期維護(hù)版本是Java 21,更多關(guān)于Java新特性的解讀和學(xué)習(xí)歡迎關(guān)注《Java 新特性解讀》。
文章來源:http://www.zghlxwxcb.cn/news/detail-841729.html
歡迎關(guān)注我的公眾號:程序猿DD。第一時間了解前沿行業(yè)消息、分享深度技術(shù)干貨、獲取優(yōu)質(zhì)學(xué)習(xí)資源文章來源地址http://www.zghlxwxcb.cn/news/detail-841729.html
到了這里,關(guān)于Java 22正式發(fā)布,一文了解全部新特性的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!