JDK12的五大重要新特性
文章目錄
- JDK12的五大重要新特性
- 引入JVM常量API
- 擴展了switch語句
- 支持Unicode 11.0
- 為日本Reiwa Era提供了方形字符支持
- NumberFormat增加了對以緊湊格式格式化數字的支持
JDK12的五大重要新特性
Java12在March 19, 2019發布了。
在2017年發布Java 9之后,Java平臺發布節奏已從每3年以上的主要版本轉變為每6個月發布一次功能?,F在,每年的3月和9月都會發布新的版本功能。 從而提供了更細化,更快和可管理的版本更新。
這是一個好消息,不好的就是大家會覺得JDK的版本更新太快了。
什么?JDK12已經出來了?
什么?9月份要出JDK13了?
什么?我還在用JDK8?
廢話少說,我們來看下JDK12的五個比較重要的新特性:
引入JVM常量API
每個Java類文件都有一個常量池,該池存儲該類中字節碼指令的操作。廣義上講,常量池中的條目要么描述運行時artifacts(例如類和方法),要么描述簡單值(例如字符串和整數)。
所有這些條目都稱為可加載常量,因為它們可以用作ldc指令的參數(“加載常量”)。它們也可能出現在invokedynamic指令的引導方法的靜態參數列表中。執行ldc或invokedynamic指令會導致將可加載常量解析為標準Java類型(如Class,String或int)的“實時”值。
處理類文件的程序需要對字節碼指令進行建模,然后對可加載常量進行建模。但是,使用標準Java類型對可加載常量進行建模是不夠的。
描述一個字符串(一個CONSTANT_String_info條目)的可加載常量可能是可以接受的,因為生成一個“live” String對象是很簡單的,但是對于描述一個類(一個CONSTANT_Class_info條目)的一個可加載常量來說,這是有問題的,因為生成一個“live”類對象依賴于類加載的正確性和一致性。
在實際應用中,類加載具有許多環境依賴性和失敗的情況,例如:所需的類不存在或請求者可能無法訪問;類加載的結果隨上下文而變化;加載類具有副作用;有時根本不可能加載類。
因此,處理可加載常量的程序如果能夠操縱類和方法,并且以純名義上的符號形式操縱諸如方法句柄和動態計算的常量之類的artifacts,則它們將變得更加簡單。
JDK12在新包java.lang.invoke.constant中定義了一系列基于值的符號引用(JVMS 5.1)類型,它們能夠描述每種可加載常量。符號引用以純字面的形式描述了可加載常量,與類加載或可訪問性上下文分開。某些類可以充當自己的符號引用(例如String);對于可鏈接常量,JDK12定義了一系列符號引用類型(ClassDesc,MethodTypeDesc,MethodHandleDesc和DynamicConstantDesc),來包含描述這些常量的信息。
擴展了switch語句
這是JEP 325提出的一個預覽版本的預發特性?,F在被JDK13的 JEP 354替代了。
簡單點講就是擴展了switch語法,可以用作語句或表達式。
老的寫法:
switch (day) {case MONDAY:case FRIDAY:case SUNDAY:System.out.println(6);break;case TUESDAY:System.out.println(7);break;case THURSDAY:case SATURDAY:System.out.println(8);break;case WEDNESDAY:System.out.println(9);break; }新的寫法:
switch (day) {case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);case TUESDAY -> System.out.println(7);case THURSDAY, SATURDAY -> System.out.println(8);case WEDNESDAY -> System.out.println(9); }還可以有返回值:
int numLetters = switch (day) {case MONDAY, FRIDAY, SUNDAY -> 6;case TUESDAY -> 7;case THURSDAY, SATURDAY -> 8;case WEDNESDAY -> 9; };支持Unicode 11.0
JDK 12版本包含對Unicode 11.0.0的支持。 在支持Unicode 10.0.0的JDK 11發行之后,Unicode 11.0.0引入了JDK 12現在包含的以下新功能:
- 684個新字符
- 11個新blocks
- 7個新腳本。
為日本Reiwa Era提供了方形字符支持
簡單點說就是日本朝代更替,造了一個新字(Reiwa 令和)。所以需要Unicode的支持。
Unicode聯盟為這個字保留代碼:U+32FF。
現在的日本朝代叫:(Heisei 平成)。 是指日本歷史的一段時期,對應于明仁天皇從1989年1月8日至至2019年4月30日退位。
他的兒子Naruhito皇太子于5月1日成為新的天皇后,改朝代名為:Reiwa。
NumberFormat增加了對以緊湊格式格式化數字的支持
NumberFormat增加了以緊湊格式格式化數字的支持。 緊湊的數字格式是指數字的簡短形式或易于理解的形式。 例如,在en_US語言環境中,根據NumberFormat.Style指定的樣式,可以將1000格式化為“ 1K”,將1000000格式化為“ 1M”。 緊湊數字格式由LDML的緊湊數字格式規范定義。 若要獲取實例,請使用NumberFormat給出的工廠方法之一來進行緊湊數字格式化。 例如:
NumberFormat fmt = NumberFormat.getCompactNumberInstance(Locale.US,NumberFormat.Style.SHORT); String result = fmt.format(1000);上面的示例生成“ 1K”。
更多精彩內容且看:
- 區塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續更新
- Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
- Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
- java程序員從小工到專家成神之路(2020版)-持續更新中,附詳細文章教程
更多教程請參考 flydean的博客
總結
以上是生活随笔為你收集整理的JDK12的五大重要新特性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Libra教程之:运行自定义move m
- 下一篇: Libra教程之:Libra proto