自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java12新特性介紹

開發(fā) 后端
在 Java 12 中,對 Switch 表達式的寫法進行了改進,雖然是一個語法糖的改進,也讓 Switch 的代碼編寫變得更加優(yōu)雅。

[[397158]]

Switch 表達式 (JEP 325)

在 Java 12 中,對 Switch 表達式的寫法進行了改進,雖然是一個語法糖的改進,也讓 Switch 的代碼編寫變得更加優(yōu)雅。先看一下在 Java 12 之前的 Switch 的寫法。 

  1. // 通過傳入月份,輸出月份所屬的季節(jié)  
  2. public static void switchJava12Before(String day) {  
  3.     switch (day) {  
  4.         case "march":  
  5.         case "april":  
  6.         case "may":  
  7.             System.out.println("春天");  
  8.             break;  
  9.         case "june":  
  10.         case "july":  
  11.         case "august":  
  12.             System.out.println("夏天");  
  13.             break;  
  14.         case "september":  
  15.         case "october":  
  16.         case "november":  
  17.             System.out.println("秋天");  
  18.             break;  
  19.         case "december":  
  20.         case "january":  
  21.         case "february":  
  22.             System.out.println("冬天");  
  23.             break;  
  24.     }  

上面的例子中,通過傳入一個月份,輸出這個月份對應的季節(jié)。簡單的功能卻寫了大量代碼,而且每個操作都需要一個 break來防止 Case 穿透。

使用預覽功能

由于 Switch 表達式在 Java 12 中并不是一個正式發(fā)布的功能,還處于預覽測試階段,所以想要使用 Java 12 去編譯運行就需要打開功能預覽參數(shù),當然,如果你使用的是 Java 14 以及更高版本,就可以直接跳過這個部分了。 

  1. # 編譯時  
  2. ./bin/javac --enable-preview -source 12 ./Xxx.java  
  3. # 運行時  
  4. ./bin/java --enable-preview Xxx 

如果某個新特性是預覽功能,這意味著這個功能有可能在未來的版本中刪除。

Java 12 Switch

由于 Switch 存在的上述問題,所以在 Java 12 中對 Switch 進行了改進,讓其可以使用 case L -> 的方式進行操作,那么在 Java 12 中可以怎么編寫這段代碼呢? 

  1. public static void switchJava12(String day) {  
  2.     switch (day) {  
  3.         case "march", "april", "may"            -> System.out.println("春天");  
  4.         case "june", "july", "august"           -> System.out.println("夏天");  
  5.         case "september", "october", "november" -> System.out.println("秋天");  
  6.         case "december", "january", "february"  -> System.out.println("冬天");  
  7.     }  

通過測試可以得到預期的輸出結果。這還不夠,在 Switch 的改進中,還支持了使用 Switch 的返回值進行賦值。

像下面這樣: 

  1. String season = switch (day) {  
  2.     case "march", "april", "may"            -> "春天";  
  3.     case "june", "july", "august"           -> "春天";  
  4.     case "september", "october", "november" -> "春天";  
  5.     case "december", "january", "february"  -> "春天";  
  6.     default -> {  
  7.       //throw new RuntimeException("day error")  
  8.         System.out.println("day error");  
  9.         break "day error";  
  10.     }  
  11. };  
  12. System.out.println("當前季節(jié)是:" + season); 

雖然編寫更加簡單了,其實這些只不過是語法糖式的更新,編譯后和之前并沒有太大區(qū)別。 

文件對比 Files.mismatch

在 Java 中對于文件的操作已經(jīng)在 Java 7 中進行了一次增強,這次 Java 12 又帶來了文件對比功能。對比兩個文件,如果內容一致,會返回 -1 ,如果內容不同,會返回不同的字節(jié)開始位置。 

  1. // 創(chuàng)建兩個文件  
  2. Path pathA = Files.createFile(Paths.get("a.txt"));  
  3. Path pathB = Files.createFile(Paths.get("b.txt"));  
  4. // 寫入相同內容  
  5. Files.write(pathA,"abc".getBytes(), StandardOpenOption.WRITE);  
  6. Files.write(pathB,"abc".getBytes(), StandardOpenOption.WRITE);  
  7. long mismatch = Files.mismatch(pathA, pathB);  
  8. System.out.println(mismatch);  
  9. // 追加不同內容  
  10. Files.write(pathA,"123".getBytes(), StandardOpenOption.APPEND);  
  11. Files.write(pathB,"321".getBytes(), StandardOpenOption.APPEND);  
  12. mismatch = Files.mismatch(pathA, pathB);  
  13. System.out.println(mismatch);  
  14. // 刪除創(chuàng)建的文件  
  15. pathA.toFile().deleteOnExit();  
  16. pathB.toFile().deleteOnExit();   
  17. // RESULT  
  18. // -1  
  19. // 3 

對比功能的實現(xiàn)可以直接閱讀源碼,還是很簡單的。 

Compact Number

簡化的數(shù)字格式可以直接轉換數(shù)字顯示格式,比如 1000 -> 1K,1000000 -> 1M 。 

  1. System.out.println("Compact Formatting is:");  
  2. NumberFormat upvotes = NumberFormat.getCompactNumberInstance(new Locale("en", "US"), Style.SHORT);  
  3. System.out.println(upvotes.format(100));  
  4. System.out.println(upvotes.format(1000));  
  5. System.out.println(upvotes.format(10000));  
  6. System.out.println(upvotes.format(100000));  
  7. System.out.println(upvotes.format(1000000));  
  8. // 設置小數(shù)位數(shù)  
  9. upvotes.setMaximumFractionDigits(1);  
  10. System.out.println(upvotes.format(1234));  
  11. System.out.println(upvotes.format(123456));  
  12. System.out.println(upvotes.format(12345678)); 

可以得到輸出如下: 

  1. 100  
  2. 1K  
  3. 10K  
  4. 100K  
  5. 1M  
  6. 1.2K  
  7. 123.5K  
  8. 12.3M  

JVM 相關更新

Shenandoah 垃圾收集器

Java 12 增加了 Shenandoah 一個低停頓的垃圾收集器,它可以和 Java 應用程序中的執(zhí)行線程同時進行,用來收集垃圾進行內容回收,這樣就可以讓停頓時間更少。

更多關于 Shenandoah 垃圾收集器的介紹可以查看文檔:Shenandoah GC 介紹。

ZGC 并發(fā)類卸載

Z 垃圾收集器現(xiàn)在支持類卸載,通過卸載不使用的類來釋放這些類相關的數(shù)據(jù)結構,從而減少應用程序的總體占用空間。因為是并發(fā)執(zhí)行,所以不會停止 Java 應用程序線程的執(zhí)行,也因此對 GC 的暫停時間影響微乎其微。默認情況下啟用此功能,但可以使用命令行選項禁用-XX:-ClassUnloading。

JVM 常量 API

在包 java.lang.invoke.constant 中定義了一系列的基于值的符號引用,可以用來描述各種可加載常量??梢愿菀椎膶﹃P鍵類文件和運行時構建的名義描述進行建模,特別是對那些從常量池中加載的常量,也讓開發(fā)者可以更簡單標準的處理可加載常量。

默認使用類數(shù)據(jù)共享(CDS)

這已經(jīng)不是 JDK 第一次改進 CDS(Class Data Sharing) 功能了,CDS 可以讓 JVM 在同一臺機器或虛擬機上啟動多個應用的速度速度大大增加。原理是在啟動應用時共享一些類加載信息,這樣啟動新進程時就可以使用共享的數(shù)據(jù)。在  Java 12 之前此功能需要手動開啟,Java 12 調整為默認開啟。

微基準套件

Java 12  中添加一套新的基于 JMH 的基本的微基準測試套件。 。 

其他更新

1. 支持 Unicode 11

在 Java 11 支持了 Unicode 10 之后, Java 12 支持了 Unicode 11,支持操作更多的表情、符號。   

 

責任編輯:龐桂玉 來源: Hollis
相關推薦

2012-03-14 12:29:55

JavaPlay Framwo

2009-03-24 11:54:12

2021-03-06 08:10:16

Redis6 Java架構分布式框架

2017-01-09 16:25:55

Android Shortcuts系統(tǒng)

2009-08-19 16:51:14

C# 4.0 dyna

2020-11-04 11:05:38

JavaScript新特性前端

2009-08-12 13:15:44

C#3.5新特性

2009-08-18 17:03:49

C#3.5新特性

2011-07-06 16:38:57

Xcode Preview

2009-09-27 10:00:00

OSGi 4.2

2009-08-28 08:46:15

Windows 7防火墻

2021-03-02 07:13:54

Java8版本升級

2021-07-24 13:16:31

Android 代碼操作系統(tǒng)

2013-02-26 09:36:57

RubyRuby 2.0

2023-05-04 07:48:29

Debian 12Linux

2021-02-22 11:51:15

Java開發(fā)代碼

2019-11-07 15:20:07

JavaCollectorsteeing

2011-11-06 21:19:38

Eclipse

2009-09-04 15:26:20

Windows 7編程

2019-04-09 09:40:23

點贊
收藏

51CTO技術棧公眾號