<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 14 新功能介紹

          共 9173字,需瀏覽 19分鐘

           ·

          2021-08-16 01:18

          Java 14, 圖片來自 medium.com

          Java 14 早在 2019 年 9 月就已經(jīng)發(fā)布,雖然不是長久支持版本,但是也帶來了不少新功能。

          Java 14 官方下載:https://jdk.java.net/archive/

          Java 14 官方文檔:https://openjdk.java.net/projects/jdk/14/

          Java 14 新功能:

          • 305: instanceof 類型判斷(預(yù)覽)
          • 343: 打包工具(孵化)
          • 345: G1 支持 NUMA(非統(tǒng)一內(nèi)存訪問)
          • 358: 更有用的 NullPointerExceptions
          • 359: Records (預(yù)覽)
          • 361: Switch 表達(dá)式 (標(biāo)準(zhǔn))
          • 362: 廢棄對 Solaris 和 SPARC 端口支持
          • 363: 移除 CMS 垃圾收集器
          • 364: macOS 的 ZGC
          • 365: Windows 的 ZGC
          • 366: 棄用 ParallelScavenge + SerialOld GC 組合
          • 367: 刪除 Pack200 Tools 和 API
          • 368: 文本塊 (二次預(yù)覽)
          • 370: Foreign-Memory Access API (Incubator)
          • 349: JFR Event Streaming
          • 352: Non-Volatile Mapped Byte Buffers

          注意: 如果一個功能為預(yù)覽版,那么在編譯和運(yùn)行時需要打開預(yù)覽功能。

          ./javac --enable-preview --release 14 Test.java
          ./java --enable-preview Test

          此文章屬于 Java 新特性教程 系列,會介紹 Java 每個版本的新功能,可以點擊瀏覽。

          1. JEP 305:instanceof 類型判斷(預(yù)覽)

          在 Java 14 之前,使用 instanceof 進(jìn)行類型判斷之后,需要進(jìn)行對象類型轉(zhuǎn)換后才能使用。

          package com.wdbyte;

          import java.util.ArrayList;
          import java.util.List;

          public class Java14BeaforInstanceof {

              public static void main(String[] args) {
                  Object obj = new ArrayList<>();
                  if (obj instanceof ArrayList) {
                      ArrayList list = (ArrayList)obj;
                      list.add("www.wdbyte.com");
                  }
                  System.out.println(obj);
              }
          }

          而在 Java 14 中,可以在判斷類型時指定變量名稱進(jìn)行類型轉(zhuǎn)換,方便了使用。

          package com.wdbyte;

          import java.util.ArrayList;

          public class Java14Instanceof {
              public static void main(String[] args) {
                  Object obj = new ArrayList<>();
                  if (obj instanceof ArrayList list) {
                      list.add("www.wdbyte.com");
                  }
                  System.out.println(obj);
              }
          }

          可以看到,在使用 instanceof 判斷類型成立后,會自動強(qiáng)制轉(zhuǎn)換類型為指定類型。

          輸出結(jié)果:

          [www.wdbyte.com]

          這個特性在 Java 14 中還是預(yù)覽功能,在 Java 16 中正式轉(zhuǎn)正。

          2. JEP 343:打包工具(孵化)

          在 Java 14 中,引入了打包工具,命令是 jpackage,使用 jpackage 命令可以把 JAR 包打包成不同操作系統(tǒng)支持的軟件格式。

          jpackage --name myapp --input lib --main-jar main.jar --main-class myapp.Main

          常見平臺格式如下:

          1. Linux: deb and rpm
          2. macOS: pkg and dmg
          3. Windows: msi and exe

          要注意的是,jpackage 不支持交叉編譯,也就是說在 windows 平臺上是不能打包成 macOS 或者 Linux 系統(tǒng)的軟件格式的。

          3. JEP 345:G1 支持 NUMA(非統(tǒng)一內(nèi)存訪問)

          G1 收集器現(xiàn)在可以感知 NUMA 內(nèi)存分配方式,以提高 G1 的性能,可以使用 +XX:+UseNUMA 啟用這項功能。

          擴(kuò)展閱讀:https://openjdk.java.net/jeps/345

          4. JEP 358:更有用的 NullPointerExceptions

          NullPointerException 一直都是一個比較常見的異常,但是在 Java 14 之前,如果一行有多個表達(dá)式時,這時報了空指針后,單純的從報錯信息來看,可能并不知道是哪個對象為 NULL ,下面是一個演示。

          package com.wdbyte;

          public class Java14NullPointerExceptions {

              public static void main(String[] args) {
                  String content1 = "www.wdbyte.com";
                  String content2 = null;
                  int length = content1.length() + content2.length();
                  System.out.println(length);
              }
          }

          在 Java 14 之前,從下面的報錯中我們只能得到錯誤出現(xiàn)的行數(shù),但是并不能確定是 conteng1 還是 content2null。

          Exception in thread "main" java.lang.NullPointerException
           at com.alibaba.security.astralnet.console.controller.ApiChartsTest.main(Java14NullPointerExceptions.java:8)

          但是在 Java 14 中,會清晰的告訴你 because "content2" is null 。

          Exception in thread "main" java.lang.NullPointerException: 
           Cannot invoke "String.length()" because "content2" is null
           at com.wdbyte.Java14NullPointerExceptions.main(Java14NullPointerExceptions.java:8)

          5. JEP 359:Records (預(yù)覽)

          record 是一種全新的類型,它本質(zhì)上是一個 final 類,同時所有的屬性都是 final 修飾,它會自動編譯出 public get hashcode 、equals、toString 等方法,減少了代碼編寫量。

          示例:編寫一個 Dog record 類,定義 name 和 age 屬性。

          package com.wdbyte;

          public record Dog(String name, Integer age) {
          }

          Record 的使用。

          package com.wdbyte;

          public class Java14Record {

              public static void main(String[] args) {
                  Dog dog1 = new Dog("牧羊犬"1);
                  Dog dog2 = new Dog("田園犬"2);
                  Dog dog3 = new Dog("哈士奇"3);
                  System.out.println(dog1);
                  System.out.println(dog2);
                  System.out.println(dog3);
              }
          }

          輸出結(jié)果:

          Dog[name=牧羊犬, age=1]
          Dog[name=田園犬, age=2]
          Dog[name=哈士奇, age=3]

          這個功能在 Java 15 中進(jìn)行二次預(yù)覽,在 Java 16 中正式發(fā)布。

          6. JEP 361:Switch 表達(dá)式 (標(biāo)準(zhǔn))

          Switch 表達(dá)式改進(jìn)從 Java 12 就已經(jīng)開始了,Java 12 讓 switch 支持了 L-> 語法,Java 13 引入了 yield 關(guān)鍵詞用于返回結(jié)果,但是在 Java 12 和 13 中功能都是預(yù)覽版的,而在 Java 14 中,正式轉(zhuǎn)正。

          // 通過傳入月份,輸出月份所屬的季節(jié)
          public static String switchJava12(String month) {
               return switch (month) {
                  case "march""april""may"            -> "春天";
                  case "june""july""august"           -> "夏天";
                  case "september""october""november" -> "秋天";
                  case "december""january""february"  -> "冬天";
                  default -> "month erro";
              };
          }
          // 通過傳入月份,輸出月份所屬的季節(jié)
          public static String switchJava13(String month) {
              return switch (month) {
                  case "march""april""may":
                      yield "春天";
                  case "june""july""august":
                      yield "夏天";
                  case "september""october""november":
                      yield "秋天";
                  case "december""january""february":
                      yield "冬天";
                  default:
                      yield "month error";
              };
          }

          擴(kuò)展閱讀:Java 12 新特性介紹,Java 13 新功能介紹,JEP 325: Switch 表達(dá)式

          7. JEP 368:文本塊(二次預(yù)覽)

          文本塊是 Java 13 引入的語法,在 Java 14 中對其進(jìn)行了增強(qiáng)。文本塊依舊是預(yù)覽功能,這次更新增加了兩個轉(zhuǎn)義符。

          1. \  結(jié)尾不換行
          2. \s 表示一個空格

          示例:文本塊體驗

          String content = """
                  {
                      "
          upperSummary": null,\
                      "
          sensitiveTypeList": null,
                      "
          gmtModified": "2011-08-05\s10:50:09",
                  }
                   "
          "";
          System.out.println(content);

          輸出結(jié)果:

          {
              "upperSummary": null,    "sensitiveTypeList": null,
              "gmtModified""2011-08-05 10:50:09",
          }

          文本塊功能在 Java 15 中正式發(fā)布。

          其他更新

          JEP 362:廢棄對 Solaris 和 SPARC 端口支持

          從 Java 14 開始,放棄對 Solaris/SPARC, Solaris/x64, 和 Linux/SPARC 端口的支持,放棄一部分開發(fā)這勢必會加快 Java 整體的開發(fā)節(jié)奏。

          相關(guān)閱讀:https://openjdk.java.net/jeps/362

          JEP 363:移除 CMS 垃圾收集器

          移除對 CMS(Concurrent Mark Sweep) 垃圾收集器的支持,其實早在 Java 9 就開始移除 CMS 垃圾收集器了,只不過在 Java 14 中被正式刪除。

          JEP 364:macOS 上的 ZGC(實驗性)

          Java 11 在 Linux 上引入了 Z 垃圾收集器 (ZGC),現(xiàn)在它可以移植到 macOS。

          JEP 365:Windows 上的 ZGC(實驗性)

          Java 11 在 Linux 上引入了 Z 垃圾收集器 (ZGC),現(xiàn)在它可以移植到 Windows 上(版本大于 1803)。

          JEP 366:棄用 ParallelScavenge + SerialOld GC 組合

          由于使用場景不多,維護(hù)工作太大,廢棄之。相關(guān)閱讀:https://openjdk.java.net/jeps/366

          JEP 367:刪除 Pack200 工具和 API

          參考

          1. https://openjdk.java.net/projects/jdk/14/
          2. https://openjdk.java.net/jeps/366
          3. https://openjdk.java.net/jeps/362

          點個在看,加油充電~??

          瀏覽 64
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  日韩爽爽| 国产大保健 | 国产裸体XXXX187 | 日P网站 日本尻屄 | 毛片基地操逼视频 |