17日JDK 14 正式發佈了,有些特性值得關注

file

2020年3月17日JDK 14 正式發佈了,其中仍是有一些值得關注的新特性。若是你以爲我寫的東西對於您有幫助,但願獲得您的關注!html

1、instanceof的模式匹配:

Instanceof是java中用於檢查對象引用是否爲給定Type類型的實例,並返回布爾值。在Java 14以前,咱們在完成判斷以後,常常須要作一下類型的強制轉換,以下:java

if (obj instanceof String) {
    String str = (String) obj; // 須要強轉
    .. str.contains(..) ..
}else{
     str = ....
}

Java 14加強功能特性:安全

if (!(obj instanceof String str)) {
    .. str.contains(..) .. // 再也不須要轉換代碼,實際發生了轉換
} else {
    .. str....
}

更多示例:函數

if (obj instanceof String str && str.length() > 5) {.. str.contains(..) ..}

if (obj instanceof String str || str.length() > 5) {.. str.contains(..) ..}

注意:僅當object不爲null時,instanceOf纔會匹配,而後僅將其分配給str。在instanceof中使用模式匹配能夠減小Java程序中顯式強制轉換的數量。this

2、NullPointerExceptions(注意帶s)

在java 14以前,咱們常常在調試代碼的時候,發現一行代碼中有多個對象,拋出異常以後你也沒法肯定究竟是哪一個對象爲null。假設此代碼中出現一個NullPointerException:spa

a.b.c.i = 99;

//下面是異常信息
Exception in thread "main" java.lang.NullPointerException
                            at Prog.main(Prog.java:5)

文件名和行號不能精確指出哪一個變量爲空。是a仍是b或c?JDK14對此作了改進。指針

Exception in thread "main" java.lang.NullPointerException:
        Cannot read field 'c' because 'a.b' is null.
    at Prog.main(Prog.java:5)

可是,這也存在一些風險。空指針異常消息包含源代碼中的變量名。暴露此信息可能被視爲程序的安全風險。調試

3、switch表達式

在Java 14以前*code

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;
}

Java 14加強功能htm

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);
}

4、record

Java 14使用record關鍵字來減小類聲明語法,這有點像lombok。咱們有時候須要編寫許多低價值的重複代碼來實現一個簡單的數據載體類:構造函數,訪問器,equals(),hashCode(),toString()等。爲了不這種重複代碼,Java 14推出record。
java14以前的代碼:

final class Point {
    public final int x;
    public final int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    // 不少的equals, hashCode, toString,getters、setters
}

Java 14中就用這一行代碼

record Point(int x, int y) { }

5、文本塊

在Java中,要將HTML,XML,SQL或JSON代碼片斷嵌入到代碼中一般很難閱讀,爲了克服此問題,Java 14引入了Text Block。
java14以前,沒有文本塊的HTML示例

String html = "<html>\n" +
              "    <body>\n" +
              "        <p>Hello, world</p>\n" +
              "    </body>\n" +
              "</html>\n";

java14,帶文本塊的HTML示例,下面的代碼看上去是多行的,實際上字符串的拼接結果仍然是一行的。

String html = """
              <html>
                  <body>
                      <p>Hello, world</p>
                  </body>
              </html>
              """;

若是你但願字符串中有換行,在每行的行尾加上「」,這樣字符串就是換行的了,能夠打印出來看一下。

String html = """
              <html>  \
                  <body>  \
                      <p>Hello, world</p>  \
                  </body>  \
              </html>
              """;

歡迎關注個人博客,裏面有不少精品合集

  • 本文轉載註明出處(必須帶鏈接,不能只轉文字):字母哥博客
相關文章
相關標籤/搜索