<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java 9 - 17 特性解讀:?Java 13

          共 2962字,需瀏覽 6分鐘

           ·

          2021-12-14 03:03


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

          Switch表達式

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

          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;
          ????default:
          ????????System.out.println(11);????
          }

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

          新的switch標簽

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

          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);
          ????default?????????????????????->?System.out.println(11);????
          }

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

          int?numLetters?=?switch?(day)?{
          ????case?MONDAY,?FRIDAY,?SUNDAY?->?6;
          ????case?TUESDAY????????????????->?7;
          ????case?THURSDAY,?SATURDAY?????->?8;
          ????case?WEDNESDAY??????????????->?9;
          ????default?????????????????????->?11;????
          };

          ?

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

          如果您正在學(xué)習(xí)Spring Cloud,推薦一個經(jīng)典教程(含Spring Cloud Alibaba):https://blog.didispace.com/spring-cloud-learning/

          yield 受限標識符

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

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

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

          ????????int?numLetters?=?switch?(day)?{
          ??????
          ????????????case?WEDNESDAY??????????????->?{
          ????????????????System.out.println("day?=?"?+?day);
          ????????????????//?yield?才是正確的
          ????????????????yield?9;
          ????????????};
          ????????????default?->?11;
          ????????};

          更合理的空指針提示

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

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

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

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

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

          最近有小伙伴吐槽?2021.3?升級后不能無限試用了,正好看到一個方法,大家可以關(guān)注公眾號?TJ君,回復(fù)IDEA2021.3,試試看吧

          其它的一些變更

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

          參考資料

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


          往期推薦



          Java 9 - 17 特性解讀:Java 12

          Java 9 - 17 特性解讀:Java 11

          Java 9 - 17 特性解讀:Java 10

          Java 9 - 17 特性解讀:Java 9


          推薦關(guān)注本文作者:碼農(nóng)小胖哥

          分享高質(zhì)量編程知識,探討IT人生

          技術(shù)干貨,實戰(zhàn)技巧,面試技巧,前沿資訊一個都不能少
          瀏覽 50
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  人妻嫩b| 国产免费成人在线视频 | 日韩欧美黄 | 无码高清在线看 | 韩国一级网站 |