動(dòng)力節(jié)點(diǎn)-始于2009年,口口相傳的Java黃埔軍校 400-8080-105

免費(fèi)學(xué)前測(cè)評(píng) 領(lǐng)取最新教程資料

查看家門(mén)口的動(dòng)力節(jié)點(diǎn)
當(dāng)前位置: 首頁(yè) > 行業(yè)快訊 > JDK14時(shí)代來(lái)了!動(dòng)力節(jié)點(diǎn)帶你提前了解新功能!

JDK14時(shí)代來(lái)了!動(dòng)力節(jié)點(diǎn)帶你提前了解新功能!

來(lái)源: 動(dòng)力節(jié)點(diǎn) 時(shí)間:2023-04-21 16:39:28

  • 免費(fèi)預(yù)約測(cè)評(píng),鑒定適合再學(xué)
  • 4大方法+專(zhuān)家考評(píng)團(tuán)把關(guān)
  • 預(yù)約成功即送15天零基礎(chǔ)面授課

今日已有176人預(yù)約測(cè)評(píng)

  • 張同學(xué)137****9950預(yù)約成功
  • 歐陽(yáng)同學(xué)186****9232預(yù)約成功
  • 趙同學(xué)132****3458預(yù)約成功
  • 李同學(xué)137****4580預(yù)約成功
  • 趙同學(xué)180****1218預(yù)約成功
  • 蔡同學(xué)186****2232預(yù)約成功

預(yù)定于3月17日發(fā)布的JDK 14馬上就要來(lái)了!那么,JDK 14究竟有什么新功能,對(duì)于整天寫(xiě)代碼、維護(hù)代碼的開(kāi)發(fā)者們來(lái)說(shuō),哪些功能最有用呢?

前沿資訊一網(wǎng)打盡”,作為一家專(zhuān)注Java教學(xué)的教育機(jī)構(gòu),下面就讓動(dòng)力節(jié)點(diǎn)帶大家提前了解一下JDK 14的新功能!

來(lái),快來(lái)一起圍觀吧~~~

…………………………………………………………………………………………………………………………………………………………

第14版包含的JEP(Java Enhancement Proposals,Java增強(qiáng)提案)比12版和13版加起來(lái)還要多。在這篇文章中,將主要討論以下幾點(diǎn):

  • 改進(jìn)的switch表達(dá)式,第一次出現(xiàn)在Java 12和13中,在Java 14中獲得了完全的支持

  • instanceof支持模式匹配(語(yǔ)言特性)

  • NullPointerException(JVM特性)

下面就跟我一起看下詳細(xì)內(nèi)容吧~~

一、Switch表達(dá)式

Java 14 中的switch表達(dá)式將會(huì)永久存在。如果你需要回憶一下什么是switch表達(dá)式,可以參考以前的這兩篇文章(https://blogs.oracle.com/javamagazine/new-switch-expressions-in-java-12,https://blogs.oracle.com/javamagazine/inside-java-13s-switch-expressions-and-reimplemented-socket-api)。

在之前的發(fā)布中,switch表達(dá)式只是一個(gè)“預(yù)覽”階段的特性。我想提醒一下,“預(yù)覽”階段的特性的目的是為了收集反饋,這些特性可能會(huì)隨時(shí)改變,根據(jù)反饋結(jié)果,這些特性甚至可能會(huì)被移除,但通常所有的預(yù)覽特性最后都會(huì)在Java中固定下來(lái)。

新的switch表達(dá)式的優(yōu)點(diǎn)是,不再有缺省跳過(guò)行為(fall-through),更全面,而且表達(dá)式和組合形式更容易編寫(xiě),因此出現(xiàn)bug的可能性就更低。例如,switch表達(dá)式現(xiàn)在可以使用箭頭語(yǔ)法,如下所示:

一.png

二、文本塊

Java 13引入的一個(gè)預(yù)覽功能是文本塊。有了文本塊,多行的字符串字面量就很容易編寫(xiě)了。這個(gè)功能在Java 14中進(jìn)行第二次預(yù)覽,而且發(fā)生了一些變化。例如,多行文本的格式化可能需要編寫(xiě)許多字符串連接操作和轉(zhuǎn)義序列。下面的代碼演示了一個(gè)HTML的例子:

二-1.png

有了文本塊,就可以簡(jiǎn)化這一過(guò)程,只需使用三引號(hào)作為文本塊的起始和結(jié)束標(biāo)記,就能編寫(xiě)出更優(yōu)雅的代碼:

二-2.png

與普通字符串字面量相比,文本塊的表達(dá)性更好。更多的內(nèi)容可以參考這篇文章    (https://blogs.oracle.com/javamagazine/text-blocks-come-to-java)。

Java 14引入了兩個(gè)新的轉(zhuǎn)義序列。第一,可以使用新的 \s 轉(zhuǎn)義序列來(lái)表示一個(gè)空格。第二,可以使用反斜杠 \ 來(lái)避免在行尾插入換行字符。這樣可以很容易地在文本塊中將一個(gè)很長(zhǎng)的行分解成多行來(lái)增加可讀性。

例如,現(xiàn)在編寫(xiě)多行字符串的方式如下:

二-3.png

在文本塊中使用 \ 轉(zhuǎn)義序列,就可以寫(xiě)成這樣:  

二-4.png

三、instanceof的模式匹配

Java 14引入了一個(gè)預(yù)覽特性,有了它就不再需要編寫(xiě)先通過(guò)instanceof判斷再?gòu)?qiáng)制轉(zhuǎn)換的代碼了。例如,下面的代碼:

三-1.png

利用這個(gè)預(yù)覽特性可以重構(gòu)為:

三-2.png

由于條件檢查要求obj為Group類(lèi)型,為什么還要像第一段代碼那樣在條件代碼塊中指明obj為Group類(lèi)型呢?這可能會(huì)引發(fā)錯(cuò)誤。

這種更簡(jiǎn)潔的語(yǔ)法可以去掉Java程序里的大多數(shù)強(qiáng)制類(lèi)型轉(zhuǎn)換。(2011年的一篇針對(duì)相關(guān)語(yǔ)言特性的研究論文(http://www.cs.williams.edu/FTfJP2011/6-Winther.pdf)指出,24%的類(lèi)型轉(zhuǎn)換都來(lái)自于instanceof后的條件語(yǔ)句。)

JEP 305解釋了這項(xiàng)改變,并給出了Joshuoa Bloch的著作《Effective Java》中的一個(gè)例子,演示了下面兩種等價(jià)的寫(xiě)法:

三-3.png

這段代碼中冗余的CaseInsensitiveString強(qiáng)制類(lèi)型轉(zhuǎn)換可以去掉,轉(zhuǎn)換成下面的方式:

三-4.png

這個(gè)預(yù)覽特性很值得嘗試,因?yàn)樗蜷_(kāi)了通向更通用的模式匹配的大門(mén)。模式匹配的思想是為語(yǔ)言提供一個(gè)便捷的語(yǔ)法,根據(jù)特定的條件從對(duì)象中提取出組成部分。這正是instanceof操作符的用例,因?yàn)闂l件就是類(lèi)型檢查,提取操作需要調(diào)用適當(dāng)?shù)姆椒ǎ蛟L問(wèn)特定的字段。

換句話說(shuō),該預(yù)覽功能僅僅是個(gè)開(kāi)始,以后該功能肯定能夠減少更多的代碼冗余,從而降低bug發(fā)生的可能性。

四、Record

另一個(gè)預(yù)覽功能就是record。與前面介紹的其他預(yù)覽功能一樣,這個(gè)預(yù)覽功能也順應(yīng)了減少Java冗余代碼的趨勢(shì),能幫助開(kāi)發(fā)者寫(xiě)出更精準(zhǔn)的代碼。Record主要用于特定領(lǐng)域的類(lèi),它的位移功能就是存儲(chǔ)數(shù)據(jù),而沒(méi)有任何自定義的行為。

我們開(kāi)門(mén)見(jiàn)山,舉一個(gè)最簡(jiǎn)單的領(lǐng)域類(lèi)的例子:BankTransaction,它表示一次交易,包含三個(gè)字段:日期,金額,以及描述。定義類(lèi)的時(shí)候需要考慮多個(gè)方面:

  • 構(gòu)造器

  • getter方法

  • toString()

  • hashCode()和equals()

這些部分的代碼通常由IDE自動(dòng)生成,而且會(huì)占用很大篇幅。下面是生成的完整的BankTransaction類(lèi):

四—1和2.png

Java 14提供了一種方法可以解決這種冗余,可以更清晰地表達(dá)目的:這個(gè)類(lèi)的唯一目的就是將數(shù)據(jù)整合在一起。Record會(huì)提供equals、hashCode和toString方法的實(shí)現(xiàn)。因此,BankTransaction類(lèi)可以重構(gòu)如下:

四-2.png

通過(guò)record,可以“自動(dòng)”地得到equals,hashCode和toString的實(shí)現(xiàn),還有構(gòu)造器和getter方法。

要想嘗試這個(gè)例子,需要用preview標(biāo)志編譯該文件:

四-3.png

record的字段隱含為final。因此,record的字段不能被重新賦值。但要注意的是,這并不代表整個(gè)record是不可變的,保存在字段中的對(duì)象可以是可變的。

如果你有興趣閱讀更多關(guān)于record的內(nèi)容,可以閱讀Ben Evans最近在《Java Magazine》上發(fā)表的文章(https://blogs.oracle.com/javamagazine/records-come-to-java)。

請(qǐng)繼續(xù)關(guān)注該功能。從培養(yǎng)新一代的Java開(kāi)發(fā)者的視角來(lái)看,Record也很有意思。例如,如果你要培養(yǎng)初級(jí)開(kāi)發(fā)者,那么record應(yīng)該什么時(shí)候講呢?是在講OOP之前還是之后?

五、NullPointerException

一些人認(rèn)為,拋出NullPointerException異常應(yīng)該當(dāng)做新的“Hello World”程序來(lái)看待,因?yàn)镹ullPointerException是早晚會(huì)遇到的。玩笑歸玩笑,這個(gè)異常的確會(huì)造成困擾,因?yàn)樗?jīng)常出現(xiàn)在生產(chǎn)環(huán)境的日志中,會(huì)導(dǎo)致調(diào)試非常困難,因?yàn)樗⒉粫?huì)顯示原始的代碼。例如,如下代碼:

五-1.png

在Java 14之前,你可能會(huì)得到如下的錯(cuò)誤:

五-2.png

不幸的是,如果在第5行是一個(gè)包含了多個(gè)方法調(diào)用的賦值語(yǔ)句(如getLocation()和getCity()),那么任何一個(gè)都可能會(huì)返回null。實(shí)際上,變量user也可能是null。因此,無(wú)法判斷是誰(shuí)導(dǎo)致了NullPointerException。

在Java 14中,新的JVM特性可以顯示更詳細(xì)的診斷信息:

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Location.getCity()" because the return value of "User.getLocation()" is null
 ? ?at NullPointerExample.main(NullPointerExample.java:5)

該消息包含兩個(gè)明確的組成部分

  • 后果:Location.getCity()無(wú)法被調(diào)用

  • 原因:User.getLocation()的返回值為null

增強(qiáng)版本的診斷信息只有在使用下述標(biāo)志運(yùn)行Java時(shí)才有效:

五-4.png

下面是個(gè)例子:

五-5.png

在以后的版本中,該選項(xiàng)可能會(huì)成為默認(rèn)。

這項(xiàng)改進(jìn)不僅對(duì)于方法調(diào)用有效,其他可能會(huì)導(dǎo)致NullPointerException的地方也有效,包括字段訪問(wèn)、數(shù)組訪問(wèn)、賦值等。

六、總結(jié)

Java 14提供了幾個(gè)新的預(yù)覽版語(yǔ)言特性和更新,能很好地幫助開(kāi)發(fā)者完成日常工作。Java 14還引入了record,這是一種創(chuàng)建精確數(shù)據(jù)類(lèi)的新方法。此外,NullPointerException的消息經(jīng)過(guò)了改進(jìn),能顯示明確的診斷信息。switch表達(dá)式也成了Java 14的一部分。文本塊功能可以幫你處理多行字符串,這是在引入了兩個(gè)新的轉(zhuǎn)義序列之后的另一預(yù)覽功能。還有一項(xiàng)改動(dòng)就是JDK Flight Recorder的事件流。

可見(jiàn),Java 14帶來(lái)了許多創(chuàng)新。條件允許的話,你可以嘗試一下這些功能,然后反饋給Java的開(kāi)發(fā)團(tuán)隊(duì)哦~

猜你喜歡

零基礎(chǔ)學(xué)Java,為什么要首選實(shí)驗(yàn)班?

零基礎(chǔ)學(xué)Java,為什么要首選實(shí)驗(yàn)班?

零基礎(chǔ)學(xué)Java,你有沒(méi)有下面這些困惑呢?對(duì)Java了解不深,學(xué)完不知道能做什么?想轉(zhuǎn)行,又害怕辭職培訓(xùn)就業(yè)沒(méi)保障?專(zhuān)業(yè)不對(duì)口,怕學(xué)完不好就業(yè)?覺(jué)得學(xué)費(fèi)貴,經(jīng)濟(jì)壓力大?沒(méi)編程經(jīng)驗(yàn),擔(dān)心不適合這個(gè)職業(yè)?想自學(xué),又怕學(xué)的不牢靠找不到工作,浪費(fèi)時(shí)間?詳情>>

2023-07-28 10:05:44

動(dòng)力節(jié)點(diǎn)學(xué)員舒心學(xué)習(xí)背后,D9信息化教學(xué)服務(wù)平臺(tái)是如何高效助學(xué)的?!

動(dòng)力節(jié)點(diǎn)學(xué)員舒心學(xué)習(xí)背后,D9信息化教學(xué)服務(wù)平臺(tái)是如何高效助學(xué)的?!

動(dòng)力節(jié)點(diǎn)成立14年,目前設(shè)有10個(gè)分校,同時(shí)在校的學(xué)生人數(shù)眾多,怎樣實(shí)現(xiàn)統(tǒng)一管理?口口相傳的Java黃埔軍校,嚴(yán)格的教學(xué)管理服務(wù)制度怎樣被“復(fù)制”到各個(gè)校區(qū)呢?學(xué)員高薪就業(yè),高就業(yè)率又是怎樣在各校區(qū)得以延續(xù)?詳情>>

2023-07-28 09:55:43

全國(guó)程序員薪酬大曝光!看完我酸了,33% 程序員月薪達(dá)到.....

全國(guó)程序員薪酬大曝光!看完我酸了,33% 程序員月薪達(dá)到.....

2023年,隨著互聯(lián)網(wǎng)產(chǎn)業(yè)的蓬勃發(fā)展,程序員作為一個(gè)自帶“高薪多金”標(biāo)簽的熱門(mén)群體,被越來(lái)越多的人所關(guān)注。詳情>>

2023-07-20 16:14:40

上海Java培訓(xùn)講師師資團(tuán)隊(duì) >更多

杜老師 Linux專(zhuān)家 大廠技術(shù)顧問(wèn)專(zhuān)家 被譽(yù)為“Java教父”

孫老師 知名IT作家 原復(fù)旦大學(xué)教授 國(guó)內(nèi)首批架構(gòu)師骨干

Cat老師 資深架構(gòu)師 億級(jí)交易架構(gòu)保障專(zhuān)家 擅長(zhǎng)高并發(fā)高性能高可用

郭老師 高級(jí)軟件工程師 曾任技術(shù)總監(jiān) 擅長(zhǎng)大型金融/銀行支付業(yè)務(wù)

秦老師 原阿里高級(jí)工程師 資深系統(tǒng)架構(gòu)師 精通云計(jì)算物聯(lián)網(wǎng)底層技術(shù)

王老師 高級(jí)軟件工程師 擅長(zhǎng)零基礎(chǔ)實(shí)戰(zhàn)教學(xué) 被譽(yù)為“Java啟蒙天后”

楊老師 資深軟件工程師 北京奧運(yùn)場(chǎng)館人臉信息采集項(xiàng)目負(fù)責(zé)人

王老師 曾任某上市公司系統(tǒng)架構(gòu)師 分布式,微服務(wù)實(shí)戰(zhàn)應(yīng)用專(zhuān)家

崔老師 特派海歸軟件工程師 曾任百度資深架構(gòu)師

上海開(kāi)班

>更多

Java實(shí)驗(yàn)班 2024-10-26 即將報(bào)滿

Java實(shí)驗(yàn)班 2024-11-26 即將報(bào)滿

Java實(shí)驗(yàn)班 2024-12-27 即將報(bào)滿

Java就業(yè)班 2024-11-12 即將報(bào)滿

Java就業(yè)班 2024-12-12 即將報(bào)滿

Java就業(yè)班 2025-01-11 即將報(bào)滿

熱搜標(biāo)簽

Java培訓(xùn)班學(xué)費(fèi) Java培訓(xùn)班畢業(yè)找工作 零基礎(chǔ)學(xué)Java好找工作嗎 Java程序員好找工作嗎 自學(xué)Java好找工作嗎 學(xué)Java能做什么工作 Java就業(yè)前景 學(xué)Java要學(xué)多久 零基礎(chǔ)學(xué)Java難嗎 培訓(xùn)班學(xué)Java怎么樣 什么樣的人適合學(xué)Java Java培訓(xùn)多少錢(qián) Java培訓(xùn)班靠譜嗎
400-8080-105 在線咨詢3秒即回
官方微信 隨時(shí)了解最新動(dòng)態(tài)
掃一掃進(jìn)入 動(dòng)力節(jié)點(diǎn)手機(jī)站

運(yùn)營(yíng)主體北京動(dòng)力節(jié)點(diǎn)教育科技有限公司,屬具備計(jì)算機(jī)技術(shù)培訓(xùn)資質(zhì)的教育培訓(xùn)機(jī)構(gòu)