Java 22正式發佈,一文瞭解全部新特性

来源:https://www.cnblogs.com/didispace/p/18084848
-Advertisement-
Play Games

就在昨晚,Java 22正式發佈!該版本提供了 12 項功能增強,其中包括 7 項預覽功能和 1 項孵化器功能。它們涵蓋了對 Java 語言、API、性能以及 JDK 中包含的工具的改進。 下麵就來一起學習一下該版本都更新了哪些新特性! Unnamed Variables & Patterns - ...


就在昨晚,Java 22正式發佈!該版本提供了 12 項功能增強,其中包括 7 項預覽功能和 1 項孵化器功能。它們涵蓋了對 Java 語言、API、性能以及 JDK 中包含的工具的改進。

下麵就來一起學習一下該版本都更新了哪些新特性!

Unnamed Variables & Patterns - JEP 456

JEP 456 - 未命名變數和模式:當需要但未使用變數聲明或嵌套模式時,提高了可讀性。兩者都由下劃線字元表示。

價值

  • 捕獲開發人員的意圖,即未使用給定的綁定或 lambda 參數,並強制執行該屬性以澄清程式並減少出錯的機會。
  • 通過識別必須聲明(例如,在 catch 子句中)但未使用的變數,提高所有代碼的可維護性。
  • 允許多個模式出現在單個 case 標簽中,如果它們都沒有聲明任何模式變數。
  • 通過消除不必要的嵌套類型模式來提高記錄模式的可讀性。

Statements before super (…) [Preview] - JEP 447

在構造函數中,允許不引用正在創建的實例的語句出現在顯式構造函數調用之前。

價值

  • 為開發人員提供了更大的自由來表達構造函數的行為,從而可以更自然地放置目前必須納入輔助靜態方法、輔助中間構造函數或構造函數參數中的邏輯。
  • 保留構造函數在類實例化期間按自上而下順序運行的現有保證,確保子類構造函數中的代碼不會幹擾超類實例化。
  • 不需要對 Java 虛擬機進行任何更改。此 Java 語言功能僅依賴於 JVM 驗證和執行構造函數中顯式構造函數調用之前出現的代碼的當前能力。

String Templates (2nd Preview) - JEP 459

字元串模版的第2個預覽版,關於該功能之前DD給大家介紹過,更多細節可以看看之前的這篇文章String Templates(字元串模版)

價值

  • 通過輕鬆表達包含運行時計算值的字元串,簡化了 Java 程式的編寫。
  • 增強混合文本和表達式的表達式的可讀性,無論文本適合單個源行(如字元串文字)還是跨越多個源行(如文本塊)。
  • 通過支持模板及其嵌入表達式的值的驗證和轉換,提高 Java 程式的安全性,這些程式從用戶提供的值組成字元串並將其傳遞到其他系統(例如,構建資料庫查詢)。
  • 通過允許 Java 庫定義字元串模板中使用的格式化語法來保留靈活性。
  • 簡化了接受非 Java 語言(例如 SQL、XML 和 JSON)編寫的字元串的 API 的使用。
  • 允許創建根據文字文本和嵌入表達式計算的非字元串值,而無需通過中間字元串表示形式進行傳輸。

Implicitly Declared Classes and Instance Main Methods (2nd Preview) - JEP 463

隱式聲明的類和實例主要方法(2nd 預覽)- JEP 463

學生可以編寫他們的第一個 Java 程式,而無需瞭解為大型程式設計的語言功能。學生無需使用單獨的語言方言,而是可以為單類程式編寫簡化的聲明,然後隨著技能的增長無縫擴展他們的程式以使用更高級的功能。關於該特性,之前DD也介紹過,更多細節可見這篇文章未命名類和實例的Main方法

價值

  • 加速 Java 學習
  • 為 Java 編程提供了一個平滑的入門通道,以便教師可以循序漸進地介紹概念。
  • 幫助學生以簡潔的方式編寫基本程式,並隨著他們的技能增長而優雅地擴展他們的代碼。
  • 減少編寫簡單程式(例如:腳本和命令行實用程式)的方式。
  • 不引入單獨的初學者工具鏈;學生程式應該使用與編譯和運行任何 Java 程式相同的工具來編譯和運行。

Foreign Function & Memory API - JEP 454

外部函數和記憶體 API - JEP 454

允許 Java 程式與 Java 運行時之外的代碼和數據進行互操作。通過有效地調用外部函數(即 JVM 外部的代碼),並安全地訪問外部記憶體(即不受 JVM 管理的記憶體),API 使 Java 程式能夠調用本機庫並處理本機數據,而不會出現脆弱性和危險。 JNI。

價值

  • 生產力:用簡潔、可讀且純 Java API 取代脆弱的本機方法和 Java 本機介面 (JNI)。
  • 性能:提供對外部函數和記憶體的訪問,其開銷與 JNI 和 sun.misc.Unsafe 相當(如果不是更好的話)。
  • 廣泛的平臺支持:允許在 JVM 運行的每個平臺上發現和調用本機庫。
  • 一致性:提供在多種記憶體(例如本機記憶體、持久記憶體和托管堆記憶體)中操作無限大小的結構化和非結構化數據的方法。
  • 健全性:保證沒有釋放後使用錯誤,即使在多個線程之間分配和釋放記憶體時也是如此。
  • 完整性:允許程式使用本機代碼和數據執行不安全的操作,但預設警告用戶此類操作。

Class-File API (Preview) - JEP 457

類文件 API(預覽版)- JEP 457,提供用於解析、生成和轉換 Java 類文件的標準 API。

價值

  • 該API允許依賴它的框架和程式自動支持最新JDK中的最新類文件,以便可以快速、輕鬆地採用以類文件表示的新語言和VM功能。

Stream Gatherers (Preview) - JEP 461

Stream Gatherers(預覽版)- JEP 461,增強了 Stream API 以支持自定義中間操作。這將允許流管道以現有內置中間操作不易實現的方式轉換數據。

價值

  • 通過使流中的常見自定義操作更加靈活和富有表現力,提高開發人員的工作效率和代碼可讀性。儘可能允許中間操作操作無限大小的流。

Structured Concurrency (2nd Preview) - JEP 462

結構化併發(2nd 預覽版)- JEP 462,簡化併發編程。結構化併發將在不同線程中運行的相關任務組視為單個工作單元,從而簡化錯誤處理和取消、提高可靠性並增強可觀察性。

價值

  • 通過推廣一種編程風格來簡化併發代碼的開發,這種編程風格可以消除因取消和關閉而產生的常見風險(例如線程泄漏和取消延遲),並提高併發代碼的可觀察性。

Scoped Values (2nd Preview) - JEP 464

範圍值(2nd 預覽)- JEP 464,實現線程內和線程間不可變數據的高效共用。

價值

  • 易於使用 - 提供一個編程模型來線上程內以及與子線程共用數據,以簡化有關數據流的推理。
  • 可理解性——使共用數據的生命周期從代碼的語法結構中可見。
  • 魯棒性——確保調用者共用的數據只能由合法的被調用者檢索。
  • 性能——將共用數據視為不可變,以允許大量線程共用,並實現運行時優化。

Vector API (7th Incubator) - JEP 460

矢量 API(7th 孵化器)- JEP 460,一個用於表達向量計算的 API,可在運行時可靠地在支持的 CPU 架構上編譯為最佳向量指令,從而實現優於等效標量計算的性能。此 JEP 建議在 JDK 22 中重新孵化該 API,相對於JDK 21。該實現包括錯誤修複和性能增強。我們包括以下顯著變化:

  • 支持使用任何原始元素類型的數組支持的堆 MemorySegments 進行向量訪問。以前的訪問僅限於由位元組數組支持的堆 MemorySegment。

價值

  • 提供清晰簡潔的 API,能夠清晰簡潔地表達各種向量計算,這些向量計算由迴圈內組成的向量運算序列組成,並且可能還包含控制流。
  • 該 API 設計為與 CPU 架構無關,可在支持向量指令的多種架構上實現。
  • 在 x64 和 AArch64 架構上提供可靠的運行時編譯和性能。

Regional Pinning for G1 - JEP 423

G1 的區域固定 - JEP 423,通過在 G1 中實現區域固定來減少延遲,以便在 Java 本機介面 (JNI) 關鍵區域期間無需禁用垃圾收集。

價值

  • 使用 JNI 時,Java 線程無需在 G1 GC 操作完成之前等待,從而提高開發人員的工作效率。

Launch Multi-File Source-Code Programs - JEP 458

啟動多文件源代碼程式 - JEP 458,允許用戶運行作為多個 Java 源代碼文件提供的程式,而無需先進行編譯。

價值

  • 通過使從小程式到大型程式的過渡更加漸進,提高開發人員的工作效率,使開發人員能夠選擇是否以及何時配置構建工具。
  • 請註意,預覽功能已完全指定並完全實現了 Java SE 平臺的語言或 VM 功能,但它們是暫時的。它們在 JDK 功能版本中提供,以便開發人員根據實際使用情況提供反饋,然後再在未來版本中永久保留。這也為工具供應商提供了在最終確定為 Java SE 標準之前致力於支持功能的機會。
  • 孵化器模塊中的 API 將非最終 API 和非最終工具交給開發人員和用戶,以收集反饋,最終提高 Java 平臺的質量。
  • 除了 JEP 中描述的更改之外,發行說明中還列出了許多較小的更新,許多應用程式開發人員和系統管理員都會對此感興趣。其中包括棄用過時的 API 和刪除以前棄用的 API。

其他更新

Java 22 發行說明中還有​​一些其他關鍵更新:

  • 向 keytool 和 jarsigner 添加附加演算法。
  • 垃圾收集器吞吐量的提高,尤其是與“年輕”垃圾相關的情況。
  • 更好的系統模塊描述符版本報告。
  • 改進了本機代碼的“wait”處理選項。
  • Unicode 通用區域設置數據存儲庫已更新至版本 44。
  • 類型註釋支持從位元組碼載入的類型。
  • ForkJoinPool 和 ForJoinTasks 現在可以更好地處理不間斷任務。
  • 配置客戶端與伺服器 TLS 連接屬性的額外靈活性。
  • 改進了本機記憶體跟蹤,包括報告峰值使用情況的能力

最後註意:JDK 22 是通過六個月的發佈節奏按時交付的 13th 功能版本。由於預期改進源源不斷,這種程度的可預測性使開發人員能夠輕鬆管理創新的採用。Oracle 不會為 JDK 22 提供長期支持,在 2023 年 9 月之前提供更新,之後它將被 Oracle JDK 23 取代。最近的長期維護版本是Java 21,更多關於Java新特性的解讀和學習歡迎關註《Java 新特性解讀》

歡迎關註我的公眾號:程式猿DD。第一時間瞭解前沿行業消息、分享深度技術乾貨、獲取優質學習資源


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 概述:C++中模板必須在頭文件中實現,因為編譯器需要可見的實現以生成模板具體實例的代碼。通過頭文件,確保模板在每個編譯單元中都能被正確展開,提高可維護性。 在C++中,模板只能在頭文件中實現的主要原因是編譯器在使用模板時需要生成對應的代碼,而這部分代碼必須在編譯時可見。以下是詳細的解釋和示例。 基礎 ...
  • 概述:在C++中,儘管存在技巧在其範圍之外訪問局部變數的記憶體,但這是不安全和易導致未定義行為的做法。通過指針或動態記憶體分配可能違反變數的生命周期和作用域規則,應當避免使用以確保代碼安全性。 在C++中,局部變數的生命周期和作用域限制了它們的訪問範圍,通常不應該在其範圍之外訪問其記憶體。然而,通過一些技 ...
  • java 實現郵件推送 Java實現郵件推送功能 一、引入依賴 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> <version>1.4</version> </dep ...
  • C++ 簡介 什麼是 C++? C++ 是一種跨平臺的編程語言,可用於創建高性能應用程式。 C++ 是由 Bjarne Stroustrup 開發的,作為 C 語言的擴展。 C++ 為程式員提供了對系統資源和記憶體的高級控制。 該語言在 2011 年、2014 年、2017 年和 2020 年進行了 ...
  • https://leetcode.cn/problems/product-of-array-except-self/description/?envType=study-plan-v2&envId=top-interview-150 問題在於不使用除法並且空間複雜度為O(1),當第一次從頭開始遍歷時 ...
  • 車輛出險報告查詢功能一直以來都是車主們關註的重點,畢竟瞭解一輛車的出險、理賠和事故記錄對於購車和保險的選擇都有著重要影響。而今天,我將向大家介紹一款實用的API介面,通過提供車輛出險報告查詢的功能,幫助車主們快速瞭解車輛的歷史記錄。 這個API介面的使用非常簡單方便,只需要提供車輛的VIN碼和行駛證 ...
  • 你好,這裡是codetrend專欄“SpringCloud2023實戰”。歡迎點擊關註查看往期文章。 註冊中心在前文提到有很多選型,在這裡以Spring Cloud Zookeeper為例說明註冊中心的集成和使用。 選擇Spring Cloud Zookeeper作為註冊中心原因如下: 依賴更少,只 ...
  • 參考指南 fastjson:我一路向北,離開有你的季節 | 素十八 (su18.org) Java 反序列化漏洞始末(3)— fastjson - 淺藍 's blog (b1ue.cn) 梅子酒の筆記本 (meizjm3i.github.io) fastjson基礎 早期版本的 fastjson ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...