Java 14 在 2020.3.17 日發佈正式版了,但如今不少公司還在使用 Java 7 或 Java 8,每當看到 Java 又發佈新版本內心就慌得一匹。不過此版本並非 LTS (長期支持版) 版本,因此不要慌,咱們先來了解一下好了,等 LTS 版本發佈後再用也不遲。
版本說明java
如今 Java 的發佈節奏是每一年發佈兩個 GA (General Availability,正式發佈版),每 6 個月發佈一版,發佈月份爲 3 月和 9月。
Oracle 只對 LTS 版本提供付費支持,其中包括 Java 8 和 Java 11,Java 11 的付費支持會持續到 2026 年,每 3 年發佈一個 LTS 版,下一個 LTS 版本將是 Java 17。
Java 版本的快速更新,必定程度上是爲了迎合了開發者和如今技術發展的潮流,同時也利於 Java 版本的交付,把大版本拆成小版本,起碼不會出現大的延期了。
Java 14 新特性git
此版本包含的 JEP (Java/JDK Enhancement Proposals,JDK 加強提案) 比 Java 12 和 Java 13 加起來都多,總共 16 個新特性。面試
1.下載最新版 Ideadom
Idea 的預覽版 2020.1 是支持 Java 14 的,所以咱們最好下載並安裝此版本,截圖以下:
2.配置 Ideaide
若是隻是下載了最新的 Idea 去運行 Java 14 會提示以下錯誤:
Error:(10, 35) java: instanceof 中的模式匹配 是預覽功能,默認狀況下禁用。(請使用 --enable-preview 以啓用 instanceof 中的模式匹配)
這是由於 Java 14 中有不少特性還處於預覽版,須要配置一下 Idea 支持它 (Java 14) 的預覽功能,以下圖所示:
工具
小貼士:若是不想使用 Idea 體驗新特性,也可使用 javac 編譯代碼運行,編譯的時候須要加上「--enable-preview」參數,由於 Java 14 中不少功能都處於預覽版,完整編譯命令「javac --enable-preview --release 14 XXX.java」。
代碼體驗新特性優化
接下來咱們使用代碼的方式,演示幾個在 Java 14 中比較重要且好用的新特性,咱們會使用新舊代碼對比的方式,來進行演示。
1.方便的 instanceof.net
private static void instanceofTest() { Object obj = "Java 中文社羣"; // 舊寫法 if (obj instanceof String) { String s = (String) obj; System.out.println(s); } // 新寫法 if (obj instanceof String s) { System.out.println(s); } }
以上程序的執行結果爲:指針
Java 中文社羣 Java 中文社羣
2.方便的 switch日誌
// 舊寫法 switch ("java") { case "java": case "jdk": System.out.println("This is Java."); break; default: System.out.println("default"); break; } // 新寫法 switch ("java") { case "java", "jdk" -> System.out.println("This is Java."); default -> System.out.println("default"); }
以上程序的執行結果爲:
This is Java. This is Java.
3.新增記錄類型 Records
// 記錄類型
record People(Integer id, String name, Integer age) {
}
// 實例化
People people = new People(1, "老王", 18);
// 輸出屬性 name
System.out.println(people.name);
以上程序的執行結果爲:
老王
咱們使用反編譯工具來看 Records 最終的實現代碼:
➜ example git:(master) ✗ javap Java14Example\$1People final class com.example.Java14Example$1People extends java.lang.Record { public com.example.Java14Example$1People(java.lang.Integer, java.lang.String, java.lang.Integer); public java.lang.String toString(); public final int hashCode(); public final boolean equals(java.lang.Object); public java.lang.Integer id(); public java.lang.String name(); public java.lang.Integer age(); }
能夠看出,People 類最終繼承了 Record 類,建立了 toString()、equals()、hashCode() 等方法,還有三個自定義屬性方法,等等,這種寫法很熟悉嘛,這不就是一個自定義的業務類嗎?以前須要一大堆的代碼,如今兩行代碼就搞定了,真是爽,不過咱們還發現了一些細節:記錄類型是被 final 修飾的,所以他不能有子類了,而且此類也不能繼承其餘父類,由於他已經繼承了 Record 類。
總結
Java 新特性使開發愈來愈方便了,Java 14 除了垃圾回收器優化的比較多以外,還提供了幾個很是實用的語法特性,例如 instanceof 比對並賦值,還有簡潔的 Switch 和 Records,不過 Records 特性仍是預覽功能,意味着極可能在後續的版本中移除哦,它也不能徹底替代 Lombok,畢竟它繼承了 Record,還有被 final 關鍵字修飾等侷限,期待下個版本會有更多的驚喜。
參考 & 鳴謝
官方日誌:https://jdk.java.net/14/release-notes
【END】
近期熱文
阿里巴巴Java開發手冊建議設置HashMap的初始容量,但設置多少合適呢?
面試又翻車了!此次居然和Random有關?
由於我說:volatile是輕量級的synchronized,面試官讓我回去等通知!
關注下方二維碼,訂閱更多精彩內容