閑談Java9到Java20,你學(xué)會(huì)了嗎?
一、概述
自從java9開(kāi)始商用后,到現(xiàn)在一直停留在java8上。去年偶然看過(guò)說(shuō)java17之后開(kāi)始不商用了,而且springboot3和spring6最低要求JDK17,奈何太忙了一直沒(méi)時(shí)間去梳理。趁現(xiàn)在這段時(shí)間得空,從9開(kāi)始到20,逐個(gè)的去梳理下,看看有哪些變化。當(dāng)然了,限于個(gè)人能力有限,本文非正式說(shuō)明,只是個(gè)人見(jiàn)解,不可當(dāng)真。
先來(lái)個(gè)歷代特性數(shù)圖,心里有個(gè)大致的認(rèn)知。
二、各版本簡(jiǎn)介
2.1 JDK9
JDK9特性數(shù)最多的原因是這個(gè)版本引入了模塊化概念對(duì)JRE進(jìn)行了優(yōu)化,目錄結(jié)構(gòu)和之前有很大不同。
還增加了一個(gè)jshell命令,實(shí)現(xiàn)在命令行也能快速執(zhí)行java代碼的功能,對(duì)于一些簡(jiǎn)單的main方法測(cè)試,但又不想建立工程來(lái)說(shuō),確實(shí)是比較方便。
java8的時(shí)候?qū)涌谶M(jìn)行了改動(dòng),使接口可以編寫(xiě)方法體。java9對(duì)這一功能進(jìn)行了升級(jí),增加支持私有方法。
try-resource也進(jìn)行了升級(jí),可以直接傳入句柄不用再轉(zhuǎn)換了。
String類的底層由char數(shù)組換成了byte數(shù)據(jù),節(jié)省了空間和提高了性能。
另外,java9自己實(shí)現(xiàn)了一套httpclient不用再引用第三方實(shí)現(xiàn)了。
2.2 JDK10
G1終于正名了,java10開(kāi)始,G1成為默認(rèn)垃圾回收器。
增加了一個(gè)關(guān)鍵詞:var,不同于js的var,java的var是個(gè)語(yǔ)法糖,依據(jù)上下文推斷,推測(cè)出具體類型,實(shí)際編譯時(shí)依然是原本類型。
集合增加了copyOf方法,可以復(fù)制出一個(gè)不可變的集合出來(lái)。
2.3 JDK11
擴(kuò)大了var關(guān)鍵詞的應(yīng)用范圍。
String增加類似trim的實(shí)用方法,可以不用再用lang3包實(shí)現(xiàn)了。
豐富了java9的httpclient包的方法。
引入了一個(gè)新的垃圾回收器:Epsilon。
2.4 JDK12
switch表達(dá)式優(yōu)化1.0版,支持case多個(gè)字段
同時(shí)還支持將switvh結(jié)果賦值給對(duì)象上
2.5 JDK一三(為啥敏感詞?)
支持了python的文本塊功能,大文本字符串再也不會(huì)亂了,尤其是使用mybatis注解方式的,SQL看起來(lái)會(huì)更清晰。
switch表達(dá)式優(yōu)化1.1版,其實(shí)和java12寫(xiě)法沒(méi)啥區(qū)別。
2.6 JDK14
switch表達(dá)式優(yōu)化終版。
增加了Record類型的類,類似VO,但只提供getter不提供setter,對(duì)于javaee來(lái)說(shuō)缺少setter是不香的。
instaceof初版優(yōu)化,增加句柄,簡(jiǎn)化類型強(qiáng)制轉(zhuǎn)換的操作,使代碼看著更整潔。
2.7 JDK15
增加關(guān)鍵詞sealed,相比于final,sealed允許指定的類繼承。
2.8 JDK16
instaceof優(yōu)化定版。
增加Vector向量計(jì)算類。
2.9 JDK17(LTS)
注意:自本版本開(kāi)始,java恢復(fù)免費(fèi)了。并且java17類似java8是個(gè)長(zhǎng)期支持的版本。
支持蘋(píng)果的M系列芯片。
Switch支持類型推導(dǎo)了,不再限定數(shù)值、字符串了,同時(shí)還支持了case null。
2.10 JDK18
默認(rèn)UTF-8位默認(rèn)編碼
增加jwebserver命令工具,可以直接啟動(dòng)一個(gè)簡(jiǎn)單的web服務(wù)。
javadoc支持新的注解,但是好像沒(méi)啥用。
重寫(xiě)了反射,提高了反射性能。
switch又增強(qiáng)了,支持復(fù)雜的lamda表達(dá)式和類型推導(dǎo)。
2.11 JDK19
引入了虛擬線程,提高并發(fā)性能。
2.12 JDK20
java20多是對(duì)之前預(yù)覽或者改進(jìn)中的功能繼續(xù)完善,沒(méi)有更多的新功能。
3、JDK21
java21將是繼17之后的另一個(gè)LTS版本,目前規(guī)劃的有5個(gè)新特性。建議還停留在1.8的可以升級(jí)到17,已升級(jí)到17的,再等幾個(gè)月升級(jí)到21??偠灾?,java9~20是個(gè)不斷吸取他人長(zhǎng)處彌補(bǔ)自己短處的過(guò)程,java在進(jìn)步,我們也是時(shí)候更近一步了。