溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Java15的新特性有哪些

發(fā)布時(shí)間:2021-10-28 14:01:04 來(lái)源:億速云 閱讀:145 作者:iii 欄目:編程語(yǔ)言

本篇內(nèi)容主要講解“Java15的新特性有哪些”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Java15的新特性有哪些”吧!

新特性

JDK 15 新特性一覽表:

IDJEPFeature
1339Edwards-Curve Digital Signature Algorithm (EdDSA)
2360Sealed Classes (Preview)
3371Hidden Classes
4372Remove the Nashorn JavaScript Engine
5373Reimplement the Legacy DatagramSocket API
6374Disable and Deprecate Biased Locking
7375Pattern Matching for instanceof (Second Preview)
8377ZGC: A Scalable Low-Latency Garbage Collector
9378Text Blocks
10379Shenandoah: A Low-Pause-Time Garbage Collector
11381Remove the Solaris and SPARC Ports
12383Foreign-Memory Access API (Second Incubator)
13384Records (Second Preview)
14385Deprecate RMI Activation for Removal

339:Edwards-Curve Digital Signature Algorithm (EdDSA)

Edwards-Curve 數(shù)據(jù)簽名算法(EdDSA),一種根據(jù) RFC 8032 規(guī)范所描述的 Edwards-Curve 數(shù)字簽名算法(EdDSA)實(shí)現(xiàn)加密簽名,實(shí)現(xiàn)了一種 RFC 8032 標(biāo)準(zhǔn)化方案,但它不能代替 ECDSA。

EdDSA 是一種現(xiàn)代的橢圓曲線簽名方案,與 JDK 中現(xiàn)有的簽名方案相比,它有很多優(yōu)勢(shì)。

360:Sealed Classes (Preview)

封閉類(lèi)(預(yù)覽特性),可以是封閉類(lèi)和或者封閉接口,用來(lái)增強(qiáng) Java 編程語(yǔ)言,防止其他類(lèi)或接口擴(kuò)展或?qū)崿F(xiàn)它們。

這個(gè)牛逼啊,有了這個(gè)特性,意味著以后不是你想繼承就繼承,想實(shí)現(xiàn)就實(shí)現(xiàn)了,你得經(jīng)過(guò)允許才行。

來(lái)看這個(gè)示例:

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

類(lèi) Student 被 sealed 修飾,說(shuō)明它是一個(gè)封閉類(lèi),并且只允許指定的 3 個(gè)子類(lèi)繼承。

371:Hidden Classes

隱藏類(lèi),這一看也是個(gè)很有意思的特性。

隱藏類(lèi)是為框架(frameworks)所設(shè)計(jì)的,隱藏類(lèi)不能直接被其他類(lèi)的字節(jié)碼使用,只能在運(yùn)行時(shí)生成類(lèi)并通過(guò)反射間接使用它們。

372:Remove the Nashorn JavaScript Engine

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

Nashorn 是 JDK 1.8 引入的一個(gè) JavaScript 腳本引擎,用來(lái)取代 Rhino 腳本引擎。Nashorn 是 ECMAScript-262 5.1 的完整實(shí)現(xiàn),增強(qiáng)了 Java 和 JavaScript 的兼容性,并且大大提升了性能。

為什么要移除?

官方的描述是,隨著 ECMAScript 腳本語(yǔ)言的結(jié)構(gòu)、API 的改編速度越來(lái)越快,維護(hù) Nashorn 太有挑戰(zhàn)性了,所以……。

373:Reimplement the Legacy DatagramSocket API

重新實(shí)現(xiàn)了老的 DatagramSocket API 接口,更改了 java.net.DatagramSocket 和 java.net.MulticastSocket 為更加簡(jiǎn)單、現(xiàn)代化的底層實(shí)現(xiàn),更易于維護(hù)和調(diào)試。

新的底層實(shí)現(xiàn)將很容易使用虛擬線程,目前正在 Loom 項(xiàng)目中進(jìn)行探索。這也是 JEP 353 的后續(xù)更新版本,JEP 353 已經(jīng)重新實(shí)現(xiàn)了 Socket API。

374:Disable and Deprecate Biased Locking

準(zhǔn)備禁用和廢除偏向鎖,在 JDK 15 中,默認(rèn)情況下禁用偏向鎖,并棄用所有相關(guān)的命令行選項(xiàng)。

后面再確定是否需要繼續(xù)支持偏向鎖,國(guó)為維護(hù)這種鎖同步優(yōu)化的成本太高了。

375:Pattern Matching for instanceof (Second Preview)

模式匹配(第二次預(yù)覽),第一次預(yù)覽是 JDK 14 中提出來(lái)的,點(diǎn)擊這里查看棧長(zhǎng)之前寫(xiě)的詳細(xì)教程。

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 并沒(méi)有對(duì)此特性進(jìn)行調(diào)整,繼續(xù)預(yù)覽特性,只是為了收集更多的用戶(hù)反饋,可能還不成熟吧。

377:ZGC: A Scalable Low-Latency Garbage Collector

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

ZGC 最早是在 JDK 11 中集成進(jìn)來(lái)的,JDK 15 只是將 ZGC 垃圾收集器從預(yù)覽特性變更為正式特性而已,沒(méi)錯(cuò),轉(zhuǎn)正了。

這個(gè) JEP 不會(huì)更改默認(rèn)的 GC,默認(rèn)仍然是 G1。

378:Text Blocks

文本塊,是一個(gè)多行字符串,它可以避免使用大多數(shù)轉(zhuǎn)義符號(hào),自動(dòng)以可預(yù)測(cè)的方式格式化字符串,并讓開(kāi)發(fā)人員在需要時(shí)可以控制格式。

文本塊最早準(zhǔn)備在 JDK 12 添加的,但最終撤消了,然后在 JDK 13 中作為預(yù)覽特性進(jìn)行了添加,然后又在 JDK 14 中再次預(yù)覽,在 JDK 15 中,文本塊終于轉(zhuǎn)正,暫不再做進(jìn)一步的更改。

來(lái)看下這個(gè)示例你就懂了:

Java 13 之前:

String html = "<html>\n" +                "    <body>\n" +                "        <p>Hi, Java技術(shù)棧</p>\n" +                "        <p>歡迎關(guān)注,分享更多干貨</p>\n" +                "    </body>\n" +                "</html>\n";

Java 13+:

String html = """                <html>                    <body>                        <p>Hi, Java技術(shù)棧</p>                        <p>歡迎關(guān)注,分享更多干貨</p>                    </body>                </html>                """;

去掉那些無(wú)用的換行和拼接,是不是太爽了。。這個(gè)詳細(xì)教程計(jì)劃再出一篇,關(guān)注公眾號(hào)Java技術(shù)棧第一時(shí)間推送。

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

Shenandoah:一個(gè)低停頓時(shí)間的垃圾回收器。

Shenandoah 最早是在 JDK 12 中集成進(jìn)來(lái)的,JDK 15 只是將 Shenandoah 垃圾收集器從預(yù)覽特性變更為正式特性而已,沒(méi)錯(cuò),又是轉(zhuǎn)正了。

381:Remove the Solaris and SPARC Ports

移除了 Solaris 和 SPARC 端口。

移除了 Solaris/SPARC、Solaris/x64 和 Linux/SPARC 端口的源代碼及構(gòu)建支持。這些端口在 JDK 14 中就已經(jīng)被標(biāo)記為 deprecated 了,JDK 15 被移除也不奇怪。

383:Foreign-Memory Access API (Second Incubator)

外存訪問(wèn) API(二次孵化),可以允許 Java 應(yīng)用程序安全有效地訪問(wèn) Java 堆之外的外部?jī)?nèi)存。

這個(gè)最早在 JDK 14 中成為孵化特性,JDK 15 繼續(xù)二次孵化并對(duì)其 API 有了一些更新。

384:Records (Second Preview)

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

Records 在某些場(chǎng)合可以干掉 Lombok 的存在,能自動(dòng)生成了類(lèi)構(gòu)造器、toString()、hashCode()、equals(),以及類(lèi)似 getter 的變量訪問(wèn)方法。

使用方式:

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

385:Deprecate RMI Activation for Removal

廢除 RMI 激活,以便在將來(lái)進(jìn)行刪除。

需要說(shuō)明的是,RMI 激活是 RMI 中一個(gè)過(guò)時(shí)的組件,自 Java 8 以來(lái)一直是可選的。

到此,相信大家對(duì)“Java15的新特性有哪些”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI