日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Java12新特性介紹

Switch 表達(dá)式 (JEP 325)

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

成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的河南網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

 
 
 
  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.     } 
  25. }

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

使用預(yù)覽功能

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

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

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

Java 12 Switch

由于 Switch 存在的上述問題,所以在 Java 12 中對 Switch 進(jìn)行了改進(jìn),讓其可以使用 case L -> 的方式進(jìn)行操作,那么在 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.     } 
  8. }

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

像下面這樣:

 
 
 
  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("當(dāng)前季節(jié)是:" + season);

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

文件對比 Files.mismatch

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

 
 
 
  1. // 創(chuàng)建兩個文件 
  2. Path pathA = Files.createFile(Paths.get("a.txt")); 
  3. Path pathB = Files.createFile(Paths.get("b.txt")); 
  4. // 寫入相同內(nèi)容 
  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. // 追加不同內(nèi)容 
  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

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

Compact Number

簡化的數(shù)字格式可以直接轉(zhuǎn)換數(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ù)位數(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 相關(guān)更新

Shenandoah 垃圾收集器

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

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

ZGC 并發(fā)類卸載

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

JVM 常量 API

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

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

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

微基準(zhǔn)套件

Java 12  中添加一套新的基于 JMH 的基本的微基準(zhǔn)測試套件。 。

其他更新

1. 支持 Unicode 11

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


分享名稱:Java12新特性介紹
文章網(wǎng)址:http://www.dlmjj.cn/article/dhcesse.html