成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從Java 9 到 Java 17之Java 13

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

[[439177]]

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

Switch表達式

我覺得switch表達式在日常中開發被使用的太少了,不是因為這個關鍵字和if比起來太“難”,而是因為它很冗長,而且這種視覺上的噪聲容易掩蓋那些難以調試的錯誤,特別是那些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);     

一點也不清晰,所以我寫Java時通常拒絕使用switch表達式。

新的switch標簽

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

  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標簽右側的代碼被限制為表達式、代碼塊或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. }; 

當Switch語句賦值給變量時default分支是必須的。

yield 受限標識符

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

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

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

  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之前的空指針異常堆棧信息中只是提示給定行的發生了NullPointerException,不夠直觀清晰:

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

現在日志會說明空指針的具體來源:

  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導致了空指針。

其它的一些變更

由于一些預覽特性并沒有轉正,甚至在未來可能移除,所以這里不再進行詳細的說明。感興趣的可以到Java 14發行日志[1]頁面查看。多多關注,點贊,轉發,評論,后續為大家帶來更多有價值的內容輸出。

參考資料

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

 

責任編輯:武曉燕 來源: 碼農小胖哥
相關推薦

2021-09-27 10:07:31

從Java 9 Java 17Java 10

2021-09-29 06:28:12

Java 9 Java 17Java 11

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開發

2012-03-31 10:49:18

ibmdw

2023-08-08 21:03:52

2022-09-22 07:03:15

Java 18LTSOracle

2018-06-05 10:30:28

KotlinJava語言

2018-04-27 13:20:12

Java 8Java 9Java 10

2022-10-31 07:33:05

Javafor循環

2023-04-10 07:44:04

java9java21java

2020-08-18 10:20:50

Java 編程開發

2022-10-30 10:14:43

Java循環語句

2023-05-10 09:02:25

Java 8JDK 11

2021-11-26 06:43:19

Java分布式

2021-04-07 08:00:00

Java開發工具

2017-01-05 15:13:03

Java數組算法解釋

2022-09-30 07:32:48

循環while循環體

2022-11-26 00:34:57

數組Java程序
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩一区在线观看 | 日本不卡免费新一二三区 | 欧美激情精品久久久久久变态 | 国产丝袜一区二区三区免费视频 | 国产综合久久久久久鬼色 | 人人艹人人 | 亚洲男人的天堂网站 | 在线看黄免费 | 欧美日韩视频网站 | 国产在线观看一区二区三区 | 亚洲成人一二区 | 在线免费看黄 | 能看的av | 岛国午夜| 99影视 | 国产欧美在线观看 | 欧美中文字幕一区 | 超碰国产在线 | 亚洲成人天堂 | 久久精品99久久 | 伊色综合久久之综合久久 | 日韩电影免费在线观看中文字幕 | 老司机免费视频 | 91www在线观看 | 一区二区三区小视频 | 天堂一区二区三区 | 国产综合久久 | av大片在线观看 | 国产在线观看一区二区 | 国产一区二区在线免费视频 | 国产精品福利视频 | 国产乱码精品一品二品 | 狠狠久| 国产免费看 | 国产精品.xx视频.xxtv | 亚洲精品无人区 | 老牛影视av一区二区在线观看 | 精品免费视频一区二区 | 91久久国产精品 | 99riav3国产精品视频 | 午夜男人天堂 |