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

從Java 9 到 Java 17之Java 13

開發(fā) 后端
Java 13在2019年9月發(fā)布,這個版本引入的正式可用特性幾乎沒有,是我認(rèn)為最無聊的版本之一。所以我們跳過Java 13直接來看Java 14吧。

[[439177]]

Java 13在2019年9月發(fā)布,這個版本引入的正式可用特性幾乎沒有,是我認(rèn)為最無聊的版本之一。所以我們跳過Java 13直接來看Java 14吧。

Switch表達(dá)式

我覺得switch表達(dá)式在日常中開發(fā)被使用的太少了,不是因?yàn)檫@個關(guān)鍵字和if比起來太“難”,而是因?yàn)樗苋唛L,而且這種視覺上的噪聲容易掩蓋那些難以調(diào)試的錯誤,特別是那些break語句,就像下面這樣:

  1. switch (day) { 
  2.     case MONDAY: 
  3.     case FRIDAY: 
  4.     case SUNDAY: 
  5.         System.out.println(6); 
  6.         break; 
  7.     case TUESDAY: 
  8.         System.out.println(7); 
  9.         break; 
  10.     case THURSDAY: 
  11.     case SATURDAY: 
  12.         System.out.println(8); 
  13.         break; 
  14.     case WEDNESDAY: 
  15.         System.out.println(9); 
  16.         break; 
  17.     default
  18.         System.out.println(11);     

一點(diǎn)也不清晰,所以我寫Java時通常拒絕使用switch表達(dá)式。

新的switch標(biāo)簽

為了簡化switch,Java在引入了 switch標(biāo)簽case L ->這樣一個預(yù)覽特性,如果輸入匹配L,則僅執(zhí)行標(biāo)簽右側(cè)的代碼。我們還建議每個 case 允許多個常量,用逗號,分隔。之前的代碼現(xiàn)在可以寫成:

  1. switch (day) { 
  2.  
  3. case MONDAY, FRIDAY, SUNDAY -> System.out.println(6); 
  4.  
  5. case TUESDAY -> System.out.println(7); 
  6.  
  7. case THURSDAY, SATURDAY -> System.out.println(8); 
  8.  
  9. case WEDNESDAY -> System.out.println(9); 
  10.  
  11. default -> System.out.println(11); 
  12.  

case L ->switch標(biāo)簽右側(cè)的代碼被限制為表達(dá)式、代碼塊或throw語句。如果我們希望Switch語句有返回值可以這樣寫:

  1. int numLetters = switch (day) { 
  2.     case MONDAY, FRIDAY, SUNDAY -> 6; 
  3.     case TUESDAY                -> 7; 
  4.     case THURSDAY, SATURDAY     -> 8; 
  5.     case WEDNESDAY              -> 9; 
  6.     default                     -> 11;     
  7. }; 

當(dāng)Switch語句賦值給變量時default分支是必須的。

yield 受限標(biāo)識符

case L ->右邊是一個代碼塊而且根據(jù)case條件會產(chǎn)生一個值的情況下,根據(jù)我們的思維慣性會這樣寫:

  1. int numLetters = switch (day) { 
  2.  
  3.     case WEDNESDAY              -> { 
  4.         System.out.println("day = " + day); 
  5.         // 錯誤的寫法,會引發(fā)編譯錯誤 
  6.         return 9; 
  7.     }; 
  8.     default -> 11; 
  9. }; 

你會發(fā)現(xiàn)上面的寫法通不過編譯,這是語境問題,當(dāng)滿足case條件時并不是返回(return)一個值的意思,而是產(chǎn)生(yield)了一個值。所以引入了一個新的受限標(biāo)識符yield(注意不是關(guān)鍵字)來處理這個語境問題。

  1. int numLetters = switch (day) { 
  2.  
  3.     case WEDNESDAY              -> { 
  4.         System.out.println("day = " + day); 
  5.         // yield 才是正確的 
  6.         yield 9; 
  7.     }; 
  8.     default -> 11; 
  9. }; 

更合理的空指針提示

空指針異常是Java最常見的異常之一,在Java 14之前的空指針異常堆棧信息中只是提示給定行的發(fā)生了NullPointerException,不夠直觀清晰:

  1. Exception in thread "main" java.lang.NullPointerException 
  2.  
  3. at cn.felord.SomeClass.main(SomeClass.java:17) 

現(xiàn)在日志會說明空指針的具體來源:

  1. Exception in thread "main" java.lang.NullPointerException: Cannot store to int array because "arr" is null 
  2.  
  3. at cn.felord.SomeClass.main(SomeClass.java:17) 

我們可以明確地知道arr為null導(dǎo)致了空指針。

其它的一些變更

由于一些預(yù)覽特性并沒有轉(zhuǎn)正,甚至在未來可能移除,所以這里不再進(jìn)行詳細(xì)的說明。感興趣的可以到Java 14發(fā)行日志[1]頁面查看。多多關(guān)注,點(diǎn)贊,轉(zhuǎn)發(fā),評論,后續(xù)為大家?guī)砀嘤袃r值的內(nèi)容輸出。

參考資料

[1]Java 14發(fā)行日志: https://openjdk.java.net/projects/jdk/14/

 

責(zé)任編輯:武曉燕 來源: 碼農(nóng)小胖哥
相關(guān)推薦

2021-09-29 06:28:12

Java 9 Java 17Java 11

2021-09-27 10:07:31

從Java 9 Java 17Java 10

2021-10-30 18:57:36

從Java 9Java 17Java 12

2011-07-22 16:11:12

java

2023-09-23 08:17:51

Java 17開發(fā)

2023-08-08 21:03:52

2012-03-31 10:49:18

ibmdw

2018-06-05 10:30:28

KotlinJava語言

2022-09-22 07:03:15

Java 18LTSOracle

2018-04-27 13:20:12

Java 8Java 9Java 10

2022-10-31 07:33:05

Javafor循環(huán)

2023-04-10 07:44:04

java9java21java

2020-08-18 10:20:50

Java 編程開發(fā)

2023-05-10 09:02:25

Java 8JDK 11

2022-10-30 10:14:43

Java循環(huán)語句

2021-11-26 06:43:19

Java分布式

2022-09-30 07:32:48

循環(huán)while循環(huán)體

2022-11-26 00:34:57

數(shù)組Java程序

2017-01-05 15:13:03

Java數(shù)組算法解釋

2024-10-22 16:59:07

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號