Java 15 正式發布, 14 個新特性,刷新你的認知!!

2021-12-25 Java技術江湖


OracleJDK 15 發布地址:

https://www.oracle.com/java/technologies/javase/15all-relnotes.html

OpenJDK 15 發布地址:

https://openjdk.java.net/projects/jdk/15/

OracleJDK 和 OpenJDK 兩者的區別這裡不撰述了,不清楚的請點擊這裡進行查看。

現在的 JDK 真變成了「版本帝」,無力吐槽啊,版本發到 15,大部分人卻都還在用著 JDK 7/8,甚至 6。不過沒關係,多了解一下,多掌握一點新東西,對你來說沒有壞處。

新特性

JDK 15 新特性一覽表:

IDJEPFeature1339Edwards-Curve Digital Signature Algorithm (EdDSA)2360Sealed Classes (Preview)3371Hidden Classes4372Remove the Nashorn JavaScript Engine5373Reimplement the Legacy DatagramSocket API6374Disable and Deprecate Biased Locking7375Pattern Matching for instanceof (Second Preview)8377ZGC: A Scalable Low-Latency Garbage Collector9378Text Blocks10379Shenandoah: A Low-Pause-Time Garbage Collector11381Remove the Solaris and SPARC Ports12383Foreign-Memory Access API (Second Incubator)13384Records (Second Preview)14385Deprecate RMI Activation for Removal

JDK 15 一次發布了 14 個新特性,下面棧長帶大家來解讀下這些新特性!

339:Edwards-Curve Digital Signature Algorithm (EdDSA)

Edwards-Curve 數據籤名算法(EdDSA),一種根據 RFC 8032 規範所描述的 Edwards-Curve 數字籤名算法(EdDSA)實現加密籤名,實現了一種 RFC 8032 標準化方案,但它不能代替 ECDSA。

EdDSA 是一種現代的橢圓曲線籤名方案,與 JDK 中現有的籤名方案相比,它有很多優勢。

360:Sealed Classes (Preview)

封閉類(預覽特性),可以是封閉類和或者封閉接口,用來增強 Java 程式語言,防止其他類或接口擴展或實現它們。

這個牛逼啊,有了這個特性,意味著以後不是你想繼承就繼承,想實現就實現了,你得經過允許才行。

來看這個示例:

public abstract sealed class Student
    permits ZhangSan, LiSi, ZhaoLiu {
    ...
        
}

類 Student 被 sealed 修飾,說明它是一個封閉類,並且只允許指定的 3 個子類繼承。

371:Hidden Classes

隱藏類,這一看也是個很有意思的特性。

隱藏類是為框架(frameworks)所設計的,隱藏類不能直接被其他類的字節碼使用,只能在運行時生成類並通過反射間接使用它們。

372:Remove the Nashorn JavaScript Engine

移除了 Nashorn JavaScript 腳本引擎、APIs,以及 jjs 工具。這些早在 JDK 11 中就已經被標記為 deprecated 了,JDK 15 被移除就很正常了。

Nashorn 是 JDK 1.8 引入的一個 JavaScript 腳本引擎,用來取代 Rhino 腳本引擎。Nashorn 是 ECMAScript-262 5.1 的完整實現,增強了 Java 和 JavaScript 的兼容性,並且大大提升了性能。

為什麼要移除?

官方的描述是,隨著 ECMAScript 腳本語言的結構、API 的改編速度越來越快,維護 Nashorn 太有挑戰性了,所以……。

373:Reimplement the Legacy DatagramSocket API

重新實現了老的 DatagramSocket API 接口,更改了 java.net.DatagramSocket 和 java.net.MulticastSocket 為更加簡單、現代化的底層實現,更易於維護和調試。

新的底層實現將很容易使用虛擬線程,目前正在 Loom 項目中進行探索。這也是 JEP 353 的後續更新版本,JEP 353 已經重新實現了 Socket API。

374:Disable and Deprecate Biased Locking

準備禁用和廢除偏向鎖,在 JDK 15 中,默認情況下禁用偏向鎖,並棄用所有相關的命令行選項。

後面再確定是否需要繼續支持偏向鎖,國為維護這種鎖同步優化的成本太高了。

375:Pattern Matching for instanceof (Second Preview)

模式匹配(第二次預覽),第一次預覽是 JDK 14 中提出來的,點擊這裡查看棧長之前寫的詳細教程。

Java 14 之前:

if (object instanceof Kid) {
    Kid kid = (Kid) object;
    // ...
} else if (object instanceof Kiddle) {
    Kid kid = (Kid) object;
    // ...
}

Java 14+:

if (object instanceof Kid kid) {
    // ...
} else if (object instanceof Kiddle kiddle) {
    // ...
}

Java 15 並沒有對此特性進行調整,繼續預覽特性,只是為了收集更多的用戶反饋,可能還不成熟吧。

377:ZGC: A Scalable Low-Latency Garbage Collector

ZGC:一個可伸縮、低延遲的垃圾回收器。

ZGC 最早是在 JDK 11 中集成進來的,JDK 15 只是將 ZGC 垃圾收集器從預覽特性變更為正式特性而已,沒錯,轉正了。

這個 JEP 不會更改默認的 GC,默認仍然是 G1。

378:Text Blocks

文本塊,是一個多行字符串,它可以避免使用大多數轉義符號,自動以可預測的方式格式化字符串,並讓開發人員在需要時可以控制格式。

文本塊最早準備在 JDK 12 添加的,但最終撤消了,然後在 JDK 13 中作為預覽特性進行了添加,然後又在 JDK 14 中再次預覽,在 JDK 15 中,文本塊終於轉正,暫不再做進一步的更改。

來看下這個示例你就懂了:

Java 13 之前:

String html = "<html>\n" +
              "    <body>\n" +
              "        <p>Hi, Java技術棧</p>\n" +
              "        <p>歡迎關注,分享更多乾貨</p>\n" +
              "    </body>\n" +
              "</html>\n";

Java 13+:

String html = """
              <html>
                  <body>
                      <p>Hi, Java技術棧</p>
                      <p>歡迎關注,分享更多乾貨</p>
                  </body>
              </html>
              """;

去掉那些無用的換行和拼接,是不是太爽了。。這個詳細教程計劃再出一篇,關注公眾號Java技術棧第一時間推送。

379:Shenandoah: A Low-Pause-Time Garbage Collector

Shenandoah:一個低停頓時間的垃圾回收器。

Shenandoah 最早是在 JDK 12 中集成進來的,JDK 15 只是將 Shenandoah 垃圾收集器從預覽特性變更為正式特性而已,沒錯,又是轉正了。

381:Remove the Solaris and SPARC Ports

移除了 Solaris 和 SPARC 埠。

移除了 Solaris/SPARC、Solaris/x64 和 Linux/SPARC 埠的原始碼及構建支持。這些埠在 JDK 14 中就已經被標記為 deprecated 了,JDK 15 被移除也不奇怪。

383:Foreign-Memory Access API (Second Incubator)

外存訪問 API(二次孵化),可以允許 Java 應用程式安全有效地訪問 Java 堆之外的外部內存。

這個最早在 JDK 14 中成為孵化特性,JDK 15 繼續二次孵化並對其 API 有了一些更新。

384:Records (Second Preview)

Records 最早在 JDK 14 中成為預覽特性,JDK 15 繼續二次預覽。

Records 在某些場合可以幹掉 Lombok 的存在,能自動生成了類構造器、toString()、hashCode()、equals(),以及類似 getter 的變量訪問方法。

使用方式:

public record Student(String name, int id, int age) {}

實際生成:

看完是不是有點 Lombok 的感覺?具體可以點擊這裡查看棧長之前寫的詳細教程。

385:Deprecate RMI Activation for Removal

廢除 RMI 激活,以便在將來進行刪除。

需要說明的是,RMI 激活是 RMI 中一個過時的組件,自 Java 8 以來一直是可選的。

總結

本文主要介紹了 JDK/Java 15 的 14 個新特性,後面棧長有時間也會繼續出一些 JDK 15 詳細教程,關注公眾號Java技術棧第一時間推送哦。如果你想看歷史 Java 8 - 14 新特性教程,也可以在公眾號菜單中進行閱讀。

最後,來看下 Oracle Java 支持路線圖:

JDK 15 並不是一個長期支持的版本,只支持 6 個月到 2021 年 3 月,上一個長期支持版本還是 JDK 11,所以千萬不要把非長期支持版本用在生產。

JDK 15 下載地址:

https://www.oracle.com/java/technologies/javase-downloads.html

有興趣的可以下載嘗鮮了!!

寫了大半天,點個在看、轉發支持下哦,分享給你的更多朋友們~

關注公眾號【Java技術江湖】後回復「PDF」即可領取200+頁的《Java工程師面試指南》

強烈推薦,幾乎涵蓋所有Java工程師必知必會的知識點,不管是複習還是面試,都很實用。

相關焦點

  • Java 9正式發布,新特性解讀
    在歷經多次跳票之後,Java 9 終於在千呼萬喚中正式發布。從這個版本開始,Java 將每半年發布一個版本。作為霸佔程式語言排行榜鰲頭多年的老牌語言,Java 9 中有哪些不得不說的新特性?Java 語言的未來又將如何? 針對 Java 9 新特性的介紹已經非常多了,我這裡不想再做一個百科全書一樣的列表,希望從不同角度簡要點評部分特性。
  • JDK/Java 15發布
    JDK/Java 15 已經發布。根據發布規劃,這是一個短期版本,只會受到 Oracle 6 個月的支持,直到明年 3 月 JDK 16 發布。受到 8 年長期支持的 LTS 每 3 年發布一個,上一次是 18 年 9 月的 JDK 11,下一次則是 JDK 17,將於明年發布。
  • 面試官問我Java8~14的有哪些重要的新特性,我哭了~~~
    Java 8新特性見這裡:Java8新特性最佳指南 。Guide 哥:別人家的特性都用了幾年了,我 Java 才出來,哈哈!真實!Java9發布於 2017 年 9 月 21 日 。:Java 9 新增了 4 個 SHA- 3 哈希算法,SHA3-224、SHA3-256、SHA3-384 和 S HA3-512Java10發布於 2018 年 3 月 20 日,最知名的特性應該是 var 關鍵字(局部變量類型推斷)的引入了,其他還有垃圾收集器改善、GC 改進、性能提升、線程管控等一批新特性var 關鍵字
  • 內卷300秒,Java 9 到 Java 16 ,精選,新特性!
    不過雖然暫時用不上最新版本的 JAVA,但了解每個新版本的主要特性還是很重要的,不然哪天真跟著升級了,那還不得一臉懵逼。本文就帶你快速了解 JAVA 9 - 16 的主要新特性,早學完早下班!    at org.example.App.main(App.java:50)JAVA 14 也 get 到了 JAVAER 們的痛點,優化了 NullPointerException 的提示,讓你不在困惑,一眼就能定位到底「空」在哪!
  • 300 秒快速了解 Java 9 - 16 新特性,助你脫離內卷
    本文就帶你快速了解 JAVA 9 - 16 的主要新特性,早學完早下班!JAVA 8 對接口增加了默認方法的支持,在 JAVA 9 中對該功能又來了一次升級,現在可以在接口裡定義私有方法,然後在默認方法裡調用接口的私有方法。
  • 300 秒快速了解 Java 9 - 16 新特性,助你脫離內卷
    不過雖然暫時用不上最新版本的 JAVA,但了解每個新版本的主要特性還是很重要的,不然哪天真跟著升級了,那還不得一臉懵逼。本文就帶你快速了解 JAVA 9 - 16 的主要新特性,早學完早下班!    at org.example.App.main(App.java:50)JAVA 14 也 get 到了 JAVAER 們的痛點,優化了 NullPointerException 的提示,讓你不在困惑,一眼就能定位到底「空」在哪!
  • JDK/Java 14 發布
    14 正式 GA。總共 16 個新特性如下:305:Pattern Matching for instanceof (Preview)為 instanceof 運算符引入模式匹配(預覽階段)通過模式匹配,開發者可以用更簡潔和更安全的方式來表達通用的程序邏輯。
  • Oracle發布Java 15,希望數百萬人離開Rust、Kotlin等語言
    :包括文本塊和Z Garbage Collector,而密封類功能到達並進行模式匹配,並且記錄作為第二個預覽版本出現。 JDK 15是Java SE平臺版本15的開源參考實現,由Java社區流程中的JSR 390指定。JDK 15於2020年9月15日正式發布,Oracle可以提供GPL下的生產就緒二進位文件,有Linux / AArch64、Linux / x64、macOS / x64、Windows / x64平臺軟體包下載。
  • 最通俗易懂的 Java 10 新特性講解 | 原力計劃
    自從 Java 9 開始,Oracle 調整了 Java 版本的發布策略,不再是之前的 N 年一個大版本,取而代之的是 6 個月一個小版本,三年一個大版本,這樣可以讓 Java 的最新改變迅速上線,而小版本的維護周期縮短到下個版本發布之前
  • Java 9 中的 9 個新特性
    Java 8 發布三年多之後,即將快到2017年7月下一個版本發布的日期了。
  • Java 8—Java 10 特性詳解
    只需在方法名前面加個default關鍵字即可。為什麼出現默認方法為什麼要有這個特性? 首先,之前的接口是個雙刃劍,好處是面向抽象而不是面向具體編程,缺陷是,當需要修改接口時候,需要修改全部實現該接口的類,目前的java 8之前的集合框架沒有foreach方法,通常能想到的解決辦法是在JDK裡給相關的接口添加新的方法及實現。
  • iOS 14.2正式版發布:新功能新特性全匯總 你更了嗎?
    10月份iPhone 12系列的新機發布已讓我們激動不已,接下來的11月11日的返場活動也是讓我們無比期待。而在此間隙,蘋果又給我們送了一個大的福利彩蛋——iOS14.2。 11月6日凌晨,蘋果發布了正式版的iOS14.2,此次是完全正式版,與之前的準正式版有所不同。相較於iOS14.1正式版而言,iOS14.2的改動頗多,新版本也帶來了全新的體驗。
  • 18 個示例帶你掌握 Java 8 日期時間處理!
    Java處理日期、日曆和時間的方式一直為社區所詬病,將 java.util.Date設定為可變類型,以及SimpleDateFormat的非線程安全使其應用非常受限。新API基於ISO標準日曆系統,java.time包下的所有類都是不可變類型而且線程安全。
  • 3分鐘帶你品嘗新鮮出爐的Java 17,看完就知道香不香!
    Java已經過了20個年頭了,Java8之後,JDK的發行計劃變了不少,半年一小聚,三年一大鬧。根據Oracle官方的的文檔,長期支持的Java版本是Java11 和 Java17。其中Java17計劃在2021年9月14號發布,Java17 將是一個長期支持的版本(Long Terms Support)。
  • 蘋果 iOS 15 正式發布!這 20+ 個實用功能告訴你值不值得升
    SharePlay 分為幾個方面:一起觀看,也就是和朋友同時看電影電視節目;一起聆聽,邊 FaceTime 邊與朋友分享音樂,同步播放,且共享音樂隊列;分享屏幕等。據介紹,有了 iOS 15,錢包 app 將新增面向日常地點的各種鑰匙——針對別墅、公寓、工作場所,錢包可以添加工牌,輕點即可進入大樓或辦公室。
  • 《我的世界》基巖版成為領頭羊,java版竟慢了一步,讓人措手不及
    從中我們不難看出,基巖版已經成為了領頭羊,竟比我的世界java版快了一步,這讓眾多的Minecraft玩家措手不及。豬靈中的強者這種暴擊傷害讓MC玩家苦不堪言,再加上堡壘遺蹟的刷新位置比較刁鑽,所以稍不注意就會釀成大錯。對於這個生物,Mojang還沒有更新正式的遊戲資料,從中不難看出還要做出一些調整,直到完美才肯罷休。
  • JDK15已發布,網友:我還在JDK8踏步走...
    這幾天升級了 IDEA,順便體驗了一下 JDK15 的新特性。雖然我知道你們可能跟我一樣JDK8 都還沒用熟,但是無妨,看看新版本 JDK 來酸一下。這種寫法,類型轉換還是比較繁瑣,Pattern Matching for instanceof  這個新語法特性,可以幫我們省略這種類型轉換動作。這是一個在 JDK14 引入一個預覽特性,JDK 15 開始第二次預覽。
  • Node.js 15正式版發布
    官方發布了Node.js 15的正式版本,Node.js 15將替代Node.js 14成為當前的穩定發行版,且將在本月晚些時候升級為LTS(長期支持)版本。如果大家想體驗下Node.js 15的最新功能,可以從官方進行下載。那節點。js 15帶來了一些新的功能和特性呢?主要體現在以下幾個方面:1、中止控制器AbortController接口表示一個控制器對象,允許開發者根據需要中止一個或多個Web請求,Node。js 15加入了AbortController的一個實驗性實現。
  • iOS 14.3 正式版發布,你會更新嗎?
    歷時一個月零兩天,iOS 14.3 正式版終於推送了。從版本號上來看,這次正式版的版本號和此前發布的 RC2 版完全相同。也就是說,如果你之前就是 RC2 版,那麼你就不需要升級至正式版。而這次正式版的發布,最主要的新特性是為 iPhone 12 Pro 系列帶來了「Apple ProRAW」功能;加入了對AirPods Max 的支持,同時也修復了多個系統錯誤。
  • smart-doc 2.0.1 發布,Java 零註解 API 文檔生成工具
    smart-doc完全基於接口源碼分析來生成接口文檔,完全做到零註解侵入,你只需要按照java標準注釋編寫,smart-doc就能幫你生成一個簡易明了的markdown 或是一個像GitBook樣式的靜態html文檔。如果你已經厭倦了swagger等文檔工具的無數註解和強侵入汙染,那請擁抱smart-doc吧!