Java14將於3月17日發佈,我卻仍在使用Java6

Java14將於3月17日發佈,我卻仍在使用Java6

Java14將於3月17日發佈,我卻仍在使用Java6

Java14 計劃於3月17號發佈,據瞭解這一版本包含的JEP比 Java12和Java13的總和還要多。那麼,對於事必躬親的碼農來說,哪些東西能讓我們心神盪漾,值得關注呢,簡單瞭解下吧?

吐槽君:現公司基於jdk1.6的leopard的老項目仍在維護開發,甚至源碼都不全,每次都要反編譯開發,這很碼農(⊙﹏⊙)。

本文將著重而又簡單介紹以下這些 Java 新特性:

敲黑板劃重點

1、改進的 switch 表達式

2、instanceof 的模式匹配

3、NullPointerException(JVM特性)

Java14將於3月17日發佈,我卻仍在使用Java6

NO1:switch 表達式

在 Java 14 中,switch 表達式是一個正式的特性。相比之前的兩個 Java 版本中,這個特性有所改進。

新的 switch 表達式有助於減少 bug,因為它的表達和組合方式更容易編寫。例如,下面的示例:

<code>var log = switch (event) {
case PLAY -> "User has triggered the play button";
case STOP, PAUSE -> "User needs a break";
default -> {
String message = event.toString();
LocalDateTime now = LocalDateTime.now();
yield "Unknown event " + message +
" logged on " + now;
}
};/<code>

注:Java 10中引入var作為局部變量聲明的類型,如下所示:

var user=new ArrayList<user>();/<user>

NO2:instanceof 的模式匹配

Java 14引入了一個預覽特性,有了它就不再需要編寫先通過instanceof判斷再強制轉換的代碼了,簡單而又明瞭。例如,下面的代碼:

<code>if (obj instanceof User) {    
User user = (User) obj;   
var name = user.getName();
}
//利用這個預覽特性可以重構為:if (obj instanceof User user) { var name = user.getName();}/<code>

NO3:NullPointerException(JVM特性)

俗話說10個bug9個null,還有一個要隨緣。甚至有人說,開發的第一個程序是"Hello World",碼出的第一個bug是NullPointerException,它們都是碼農生涯的必經之路。

咳咳,轉回正題,NullPointerException 確實讓人抓狂,它們經常出現在生產環境的日誌裡,但調試起來很困難。例如,下面這段代碼:

<code>// 當然實際開發最好做好null處理
var name = user.getLocation().getCity().getName();/<code>

一行代碼裡連續調用了多個方法,它們都有可能返回null,而 user 也可能為 null。所以,無法一眼看出是什麼導致了 NullPointerException。

同時Java14之前,你可能會得到如下的錯誤:

<code>Exception in thread "main" java.lang.NullPointerException 
at NullPointerExample.main(NullPointerExample.java:1)/<code>

因此,無法判斷具體是誰導致了NullPointerException。

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


<code>Exception in thread "main" java.lang.NullPointerException: 
Cannot invoke "Location.getCity()" because
the return value of "User.getLocation()" is nullat
NullPointerExample.main(NullPointerExample.java:1)/<code>

該消息就很明確,無需再遠程debug就搞定了。當然這個需要配置,如下所示:

<code>java-XX:+ShowCodeDetailsInExceptionMessages NullPointerExample/<code>

上述只是空指針異常的一個例子,其他可能會導致NullPointerException的地方也有效,例如字段訪問、數組訪問、賦值等等。
最後當然,此次Java14仍有些其他比較有趣新的特性發布,各位可以自行學習(雖然我是肯定用不上)。例如下述所示:

文本塊

在 Java 14 中,該特性增加了兩個轉義字符。一個是\\s,用來表示單空格。一個是反斜槓\\,用在行末表示不換行。如果你有一個很長的字符串,為了讓代碼看起來更好看,但又不希望真的換行,就可以使用這個轉義字符。

記錄類(Record)

另一個特性是“記錄”。該特性主要是為了降低 Java 實體的“囉嗦”程度,讓開發者寫出更簡潔的代碼。這個特性主要針對在POJO類上,效果類似於lombok;

總結

Java 14延續以往的發佈路線,針對現有java提供了幾個新的語言特性和更新,能更好的提高開發者完成日常工作。雖然我們工作中未必使用,但是瞭解新特性也可以大致判斷出java語言甚至其他編程語言的發展路線,對我們個人也是大有裨益。


分享到:


相關文章: