」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Java 已經到來 有什麼新功能?

Java 已經到來 有什麼新功能?

發佈於2024-11-09
瀏覽:465

Java Has Arrived What

Java 23已正式发布!这是一个非 LTS(长期支持)版本。尽管它是一个短暂的版本,但 Java 23 包含了令人兴奋的改进、错误修复,并且还删除了您可能需要注意的功能和选项。

让我们深入了解新增内容以及它如何基于 JDK 21 和 JDK 22 等早期版本的功能构建。

范围值:基于 JDK 22 和 JDK 21 预览版构建

JDK 23 中最令人期待的功能之一是 范围值(预览版)。此功能也在 JDK 22 和 JDK 21 中预览,它简化了方法在线程和子线程之间共享不可变数据的方式。在以前的 Java 版本中,处理线程本地数据可能很麻烦并且需要大量内存。范围值通过提供更高效、更低开销的替代方案来改变这一点。

JDK 23 有什么不同? ScopedValue.callWhere() 方法现在使用新的函数接口,这使得编译器更容易推断是否可能引发已检查的异常。这也导致删除了 ScopedValue.getWhere() 方法,进一步简化了 API。

这是我们在早期版本中看到的改进的延续,很高兴看到范围值逐渐成为永久功能。

结构化并发:第三次预览

Java 的并发模型一直很强大,但管理起来却很棘手。输入结构化并发(预览版),它首次出现在 JDK 21 中,现在已经在 J​​DK 23 中达到第三个预览版。这里的想法是通过将在不同线程中运行的相关任务分组到一个线程中,使并发编程更加直观。单个工作单元。这简化了错误处理并提高了取消流程的可靠性。

在 JDK 23 中,结构化并发仍处于预览状态,但它继续使并发代码更易于推理且不易出错。如果您使用过 JDK 21 或 JDK 22 中的预览版,您将会欣赏到此功能的成熟程度。现在它可以更好地处理线程泄漏等常见并发问题,从而更轻松地编写可靠的多线程代码。

灵活的构造函数主体:自 JDK 22 以来不断发展

另一个受欢迎的补充是灵活的构造函数体(预览版)。首次在 JDK 22 中预览为“super() 之前的语句”,此功能允许开发人员在调用超类构造函数之前编写初始化代码。这个看似很小的变化可以使构造函数逻辑更加清晰,并防止在验证或其他设置逻辑失败时创建不必要的对象。

在 JDK 22 中,引入此功能是为了让开发人员更好地控制构造函数逻辑,JDK 23 中的第二个预览版继续完善该功能。通过将初始化逻辑移到超类调用之前,开发人员可以避免以前混乱的代码库的混乱辅助静态方法和中间构造函数。

隐式声明的类:第三次是一个魅力

对于那些教授 Java 或编写快速脚本的人来说,隐式声明的类和实例方法自 JDK 21 中引入以来已经改变了游戏规则。此功能允许初学者编写简化的 Java 程序,而无需理解从一开始就具有复杂的语言特征。

在 JDK 23 中,此功能得到了一些额外的升级。现在,隐式声明的类可以自动导入三个用于简单文本 I/O 的静态方法,并且它们还将按需导入 java.base 模块的所有公共顶级类和接口。这些增强功能有助于使新手的学习曲线更加平滑。

模块导入声明:新预览

JDK 23 中的新预览功能之一是模块导入声明。此功能允许您使用单个语句导入模块导出的所有包,从而简化了模块化库的重用。它对于初学者特别有用,因为他们不再需要记住包在层次结构中的位置,并且它减少了多个按需类型导入声明造成的混乱。

虽然这是 JDK 23 中的一个全新功能,但它在使 Java 的模块系统更易于访问方面显示出了巨大的希望,特别是对于那些刚接触模块化编程的人来说。

Markdown 文档评论:Javadoc 的新时代

老实说,用 HTML 和 @ 标签编写 JavaDoc 可能会很痛苦。在 JDK 23 中,Markdown 文档注释(预览)功能允许开发人员使用 Markdown 编写 API 文档,从而更轻松地创建可读、格式良好的注释。

虽然这是 JDK 23 中的新功能,但它本应该在几年前添加。 Markdown 在开发者社区中广泛使用,将其引入 JavaDoc 将使编写和维护文档变得更加容易。

Z 垃圾收集器 (ZGC):默认分代模式

如果您自 JDK 15 中引入以来一直在使用 Z 垃圾收集器 (ZGC),您会很高兴知道在 JDK 23 中,ZGC 现在默认为 分代模式(JEP 474)。此开关通过专注于频繁收集短期对象来提高应用程序性能。虽然非分代 ZGC 在此版本中已被弃用,但这清楚地表明分代方法是 Java 垃圾收集的未来。

如果您在 JDK 22 或更早版本上运行,那么迁移到 JDK 23 应该会带来显着的性能改进,而无需您付出太多努力。

Vector API:仍在孵化中,但更强大

JDK 16 中引入的 Vector API 允许开发人员执行向量计算,并在运行时编译为最佳向量指令。 API 不断发展,在 JDK 23 中,我们看到了第八个孵化器。该 API 仍在孵化中,这意味着它还不是最终确定的功能,但它正在逐渐接近成熟。

对于性能关键型应用程序,特别是那些处理大型数据集的应用程序,Vector API 可以提供巨大的加速。如果您在之前的孵化中使用过它(例如 JDK 22),您会发现它现在更加稳定,但它仍在等待最终的部分到位(可能与 Project Valhalla 相关)。

流收集者:第二次预览

JDK 22 引入了 Stream Gatherers(预览版),该功能通过允许自定义中间操作来增加 Stream API 的灵活性。在 JDK 23 中,它又回来了第二次预览。如果您喜欢使用流来处理数据,您会欣赏此功能以以前难以实现的方式转换数据管道的能力。

流收集器扩展了流的功能,使开发人员能够轻松处理更复杂的场景,特别是在使用无限流或自定义转换时。

类文件 API:第二次预览

如果您正在构建操作 Java 类文件的工具,JDK 23 中的 Class-File API(预览版)适合您。该 API 首次在 JDK 22 中引入,提供了一种解析和生成类文件的标准方法,无需使用 ASM 等第三方库。 JDK 23 中的第二个预览版改进了此 API,使其更加精简且更易于使用。

对于工具开发人员来说,这是一件大事。每次 JVM 规范发生变化时,不再需要忙着更新库 — Java 现在有了第一方解决方案。

总结:您应该升级吗?

Java 23 可能不是 LTS 版本,但它包含基于 JDK 21 和 JDK 22 引入的令人兴奋的功能。从范围值和结构化并发到更好的垃圾收集器以及对流和构造函数的改进,此版本推动了 Java 开发。

版本聲明 本文轉載於:https://dev.to/isaactony/java-23-has-arrived-whats-new-9-minute-read-i61?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 查找當前執行JavaScript的腳本元素方法
    查找當前執行JavaScript的腳本元素方法
    如何引用當前執行腳本的腳本元素在某些方案中理解問題在某些方案中,開發人員可能需要將其他腳本動態加載其他腳本。但是,如果Head Element尚未完全渲染,則使用document.getElementsbytagname('head')[0] .appendChild(v)的常規方...
    程式設計 發佈於2025-05-17
  • Android如何向PHP服務器發送POST數據?
    Android如何向PHP服務器發送POST數據?
    在android apache httpclient(已棄用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    程式設計 發佈於2025-05-17
  • Python不會對超範圍子串切片報錯的原因
    Python不會對超範圍子串切片報錯的原因
    在python中用索引切片範圍:二重性和空序列索引單個元素不同,該元素會引起錯誤,切片在序列的邊界之外沒有。 這種行為源於索引和切片之間的基本差異。索引一個序列,例如“示例” [3],返回一個項目。但是,切片序列(例如“示例” [3:4])返回項目的子序列。 索引不存在的元素時,例如“示例” [9...
    程式設計 發佈於2025-05-17
  • 在UTF8 MySQL表中正確將Latin1字符轉換為UTF8的方法
    在UTF8 MySQL表中正確將Latin1字符轉換為UTF8的方法
    在UTF8表中將latin1字符轉換為utf8 ,您遇到了一個問題,其中含義的字符(例如,“jáuòiñe”)在utf8 table tabled tablesset中被extect(例如,“致電。The recommended approach to correct the data is t...
    程式設計 發佈於2025-05-17
  • 如何將PANDAS DataFrame列轉換為DateTime格式並按日期過濾?
    如何將PANDAS DataFrame列轉換為DateTime格式並按日期過濾?
    Transform Pandas DataFrame Column to DateTime FormatScenario:Data within a Pandas DataFrame often exists in various formats, including strings.使用時間數據時...
    程式設計 發佈於2025-05-17
  • HTML格式標籤
    HTML格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2025-05-17
  • Python讀取CSV文件UnicodeDecodeError終極解決方法
    Python讀取CSV文件UnicodeDecodeError終極解決方法
    在試圖使用已內置的CSV模塊讀取Python中時,CSV文件中的Unicode Decode Decode Decode Decode decode Error讀取,您可能會遇到錯誤的錯誤:無法解碼字節 在位置2-3中:截斷\ uxxxxxxxx逃脫當CSV文件包含特殊字符或Unicode的路徑逃...
    程式設計 發佈於2025-05-17
  • 同實例無需轉儲複製MySQL數據庫方法
    同實例無需轉儲複製MySQL數據庫方法
    在同一實例上複製一個MySQL數據庫而無需轉儲在同一mySQL實例上複製數據庫,而無需創建InterMediate sqql script。以下方法為傳統的轉儲和IMPORT過程提供了更簡單的替代方法。 直接管道數據 MySQL手動概述了一種允許將mysqldump直接輸出到MySQL cli...
    程式設計 發佈於2025-05-17
  • 左連接為何在右表WHERE子句過濾時像內連接?
    左連接為何在右表WHERE子句過濾時像內連接?
    左JOIN CONUNDRUM:WITCHING小時在數據庫Wizard的領域中變成內在的加入很有趣,當將c.foobar條件放置在上面的Where子句中時,據說左聯接似乎會轉換為內部連接。僅當滿足A.Foo和C.Foobar標準時,才會返回結果。 為什麼要變形?關鍵在於其中的子句。當左聯接的右側...
    程式設計 發佈於2025-05-17
  • 為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    網格超過身體,用100%grid-template-columns 為什麼在grid-template-colms中具有100%的顯示器,當位置設置為設置的位置時,grid-template-colly修復了? 問題: 考慮以下CSS和html: class =“ snippet-code”> ...
    程式設計 發佈於2025-05-17
  • PHP與C++函數重載處理的區別
    PHP與C++函數重載處理的區別
    作為經驗豐富的C開發人員脫離謎題,您可能會遇到功能超載的概念。這個概念雖然在C中普遍,但在PHP中構成了獨特的挑戰。讓我們深入研究PHP功能過載的複雜性,並探索其提供的可能性。 在PHP中理解php的方法在PHP中,函數超載的概念(如C等語言)不存在。函數簽名僅由其名稱定義,而與他們的參數列表無關...
    程式設計 發佈於2025-05-17
  • 哪種在JavaScript中聲明多個變量的方法更可維護?
    哪種在JavaScript中聲明多個變量的方法更可維護?
    在JavaScript中聲明多個變量:探索兩個方法在JavaScript中,開發人員經常遇到需要聲明多個變量的需要。對此的兩種常見方法是:在單獨的行上聲明每個變量: 當涉及性能時,這兩種方法本質上都是等效的。但是,可維護性可能會有所不同。 第一個方法被認為更易於維護。每個聲明都是其自己的語句,使...
    程式設計 發佈於2025-05-17
  • 如何在Java中正確顯示“ DD/MM/YYYY HH:MM:SS.SS”格式的當前日期和時間?
    如何在Java中正確顯示“ DD/MM/YYYY HH:MM:SS.SS”格式的當前日期和時間?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解決方案: args)拋出異常{ 日曆cal = calendar.getInstance(); SimpleDateFormat SDF =新的SimpleDateFormat(“...
    程式設計 發佈於2025-05-17
  • 如何在php中使用捲髮發送原始帖子請求?
    如何在php中使用捲髮發送原始帖子請求?
    如何使用php 創建請求來發送原始帖子請求,開始使用curl_init()開始初始化curl session。然後,配置以下選項: curlopt_url:請求 [要發送的原始數據指定內容類型,為原始的帖子請求指定身體的內容類型很重要。在這種情況下,它是文本/平原。要執行此操作,請使用包含以下標頭...
    程式設計 發佈於2025-05-17
  • 在C#中如何高效重複字符串字符用於縮進?
    在C#中如何高效重複字符串字符用於縮進?
    在基於項目的深度下固定字符串時,重複一個字符串以進行凹痕,很方便有效地有一種有效的方法來返回字符串重複指定的次數的字符串。使用指定的次數。 constructor 這將返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.W...
    程式設計 發佈於2025-05-17

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3