雲栖号資訊:【 點選檢視更多行業資訊】
在這裡您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!
前幾天,JDK 14 正式釋出了,這次釋出的新版本一共包含了16個新的特性。
其實,從Java8 到 Java14 ,真正的改變了程式員寫代碼的方式的特性并不多,我們這篇文章就來看一下都有哪些。
Lambda表達式
Lambda 表達式是 Java 8 中最重要的一個新特性,Lambda 允許把函數作為一個方法的參數。
lambda 表達式的文法格式如下:

如以下例子:
Lambda表達式具有簡潔、容易進行并行計算、是未來的程式設計趨勢等優點,但同時也會帶來調試困難,新人了解成本高等缺點。
Streams API
除了Lambda 表達式外,Java 8中還引入了Stream API,這使得Java終于進入到函數式程式設計的行列中來了。
Stream 使用一種類似用 SQL 語句從資料庫查詢資料的直覺方式來提供一種對 Java 集合運算和表達的高階抽象。
Stream API可以極大提高Java程式員的生産力,讓程式員寫出高效率、幹淨、簡潔的代碼。
如下圖,就是通過Stream API對集合進行了一系列的操作:
Stream s = strings.stream().filter(string -> string.length()<= 6).map(String::length).sorted().limit(3)
.distinct();
而且,Stream還支援并行流,在性能上比傳統的for循環要好很多。
從Lambda表達式和Stream API問世至今,已經有6年的時間了,相信很多人已經在工作中使用過這些特性了。
雖然對于這兩種文法的使用,很多人持有不同的看法,但是作者還是認為這個功能是十分好用的,隻是在日常寫代碼的時候不要過分"炫技"使用超長的流式操作,代碼可讀性不要太低就可以了。
新的日期和時間 API
在Java 8之前,日期時間 API 存在諸多問題,如:Date非線程安全、java.util和java.sql的包中都有日期類、日期類并不提供國際化,沒有時區支援。
是以,Java 8通過釋出新的Date-Time API (JSR 310)來進一步加強對日期與時間的處理。
新的java.time包涵蓋了所有處理日期,時間,日期/時間,時區,時刻(instants),過程(during)與時鐘(clock)的操作。
常見操作如下:
但是說實話,Java8中的時間API作者日常工作中用的比較少,主要是有很多曆史代碼,還是依賴Date等類型,使用新的API就要面臨互相轉換問題。
本地變量類型推斷
在Java 10之前版本中,我們想定義定義局部變量時。我們需要在指派的左側提供顯式類型,并在指派的右邊提供實作類型:
在Java 10中,提供了本地變量類型推斷的功能,可以通過var聲明變量:
本地變量類型推斷将引入“var”關鍵字,而不需要顯式的規範變量的類型。
其實,所謂的本地變量類型推斷,也是Java 10提供給開發者的文法糖。雖然我們在代碼中使用var進行了定義,但是對于虛拟機來說他是不認識這個var的,在java檔案編譯成class檔案的過程中,會進行解糖,使用變量真正的類型來替代var(我反編譯了Java 10的本地變量類型推斷)
Switch 表達式
在JDK 12中引入了Switch表達式作為預覽特性。并在Java 13中修改了這個特性,引入了yield語句,用于傳回值。
而在之後的Java 14中,這一功能正式作為标準功能提供出來。
在以前,我們想要在switch中傳回内容,還是比較麻煩的,一般文法如下:
在JDK13中使用以下文法:
或者
在這之後,switch中就多了一個關鍵字用于跳出switch塊了,那就是yield,他用于傳回一個值。和return的差別在于:return會直接跳出目前循環或者方法,而yield隻會跳出目前switch塊。
Text Blocks
Java 13中提供了一個Text Blocks的預覽特性,并且在Java 14中提供了第二個版本的預覽。
text block,文本塊,是一個多行字元串文字,它避免了對大多數轉義序列的需要,以可預測的方式自動格式化字元串,并在需要時讓開發人員控制格式。
我們以前從外部copy一段文本串到Java中,會被自動轉義,如有一段以下字元串:
将其複制到Java的字元串中,會展示成以下内容:
即被自動進行了轉義,這樣的字元串看起來不是很直覺,在JDK 13中,就可以使用以下文法了:
使用"""作為文本塊的開始符合結束符,在其中就可以放置多行的字元串,不需要進行任何轉義。看起來就十厘清爽了。
如常見的SQL語句:
看起來就比較直覺,清爽了。
Records
Java 14 中便包含了一個新特性:EP 359: Records,
Records的目标是擴充Java語言文法,Records為聲明類提供了一種緊湊的文法,用于建立一種類中是“字段,隻是字段,除了字段什麼都沒有”的類。通過對類做這樣的聲明,編譯器可以通過自動建立所有方法并讓所有字段參與hashCode()等方法。這是JDK 14中的一個預覽特性。
使用record關鍵字可以定義一個記錄:
record 解決了使用類作為資料包裝器的一個常見問題。純資料類從幾行代碼顯著地簡化為一行代碼。(詳見:Java 14 釋出了,不使用”class”也能定義類了?還順手要幹掉Lombok!)
總結
以上,就是從Java 8 到 Java 14中,新推出的可能會影響開發人員寫代碼的方式的一些主要特性。
不知道大家有沒有發現,最近幾個版本中推出的一些功能,使得Java和Kotlin等語言越來越像了...
新的這些功能,确實在一定程度上可以簡化一些代碼,使得開發過程中更加高效,但是說實話,還沒有好到足夠吸引廣大開發者抛棄Java 8進行大規模遷移!
還是那句話:版本任你發,我用Java 8;但是新特性我們還是要去了解下的。
【雲栖号線上課堂】每天都有産品技術專家分享!
課程位址:
https://yqh.aliyun.com/live立即加入社群,與專家面對面,及時了解課程最新動态!
【雲栖号線上課堂 社群】
https://c.tb.cn/F3.Z8gvnK
原文釋出時間:2020-04-22
本文作者:HollisChuang
本文來自:“
掘金”,了解相關資訊可以關注“掘金”