你好啊,我是大阳。

Java 14 于 2020 年 3 月 17 日公布。在这篇文章中,咱们将介绍 Java编程语言中增加的一些个性以及一些代码示例。

Java14的次要更新内容如下:

  • instanceof 的模式匹配(预览版)
  • 文本块 (第二次预览)
  • NullPointerExceptions:准确形容哪个变量是null
  • record记录类(预览)
  • switch表达式(规范)

1. instanceof 的模式匹配(预览版)

在 Java 14 中,instanceof运算符已被批改为具备类型的表达式。类型测试模式(在instanceof中应用)由指定类型的形容和单个变量组成。

在上面的代码中,短语String s是类型测试模式:

if (obj instanceof String s) {    // 这里能够应用s} else {    // 这里不能应用变量s}

2. 文本块 (第二次预览)

Java解决json或者xml文本时,须要多个繁琐的嵌套本义,代码写着吃力,保护更吃力。从Java13开始引入了文本块(Text blocks),上代码:

package cn.dayangshuo;/** * @author DAYANG */public class TextBlocks {    public static void main(String[] args) {        //须要本义        String jsonStr = "{\"name\": \"大阳\"}";        //文本块,不须要转义字符        String textBlocks = """                {"name": "大阳"}                """;        System.out.println(jsonStr);        System.out.println(textBlocks);    }}

3. NullPointerExceptions:准确形容哪个变量是null

package cn.dayangshuo.collectors;/** * @author DAYANG */public class NullPointerExceprionsTest {    //空指针报错    public static void main(String[] args) {        User user = null;        System.out.println(user.getName());    }    static class User{        private String name;        public String getName() {            return name;        }        public void setName(String name) {            this.name = name;        }    }}//jdk8的报错信息:Exception in thread "main" java.lang.NullPointerException    at cn.dayangshuo.collectors.NullPointerExceprionsTest.main(NullPointerExceprionsTest.java:9)  //jdk14的报错信息:  Exception in thread "main" java.lang.NullPointerException: Cannot invoke "cn.dayangshuo.collectors.NullPointerExceprionsTest$User.getName()" because "user" is null    at cn.dayangshuo.collectors.NullPointerExceprionsTest.main(NullPointerExceprionsTest.java:9)

4. record记录类(预览)

传统的Java应用程序通过创立一个类,通过该类的构造方法实例化类,并通过getter和setter办法拜访成员变量或者设置成员变量的值。有了record关键字,你的代码会变得更加简洁。

package cn.dayangshuo;/** * 一般的dto * @author DAYANG */public class NormalEntity {    public static void main(String[] args) {        //传统的形式        User1 user1 = new User1("大阳", 1990);        System.out.println(user1);        //reocrd 记录类        User2 user2 = new User2("大阳", 1990);        System.out.println(user2);    }}/** * 成员变量都是固定的 */class User1 {    String name;    Integer age;    public User1(String name, Integer age) {        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getAge() {        return age;    }    public void setAge(Integer age) {        this.age = age;    }    @Override    public String toString() {        return "User1[" +                "name='" + name + '\'' +                ", age=" + age +                ']';    }}package cn.dayangshuo;/** * record 记录类 * 你也能够覆写equals() hashCode() toString()办法 * @author DAYANG */record User2(String name, Integer age) {    @Override    public String toString() {        return "User2[" +                "name='" + name + '\'' +                ", age=" + age +                ']';    }    @Override    public boolean equals(Object obj) {        return false;    }    @Override    public int hashCode() {        return 0;    }}

5. switch表达式(规范)

上代码:

package cn.dayangshuo;/** * @author DAYANG */public class OldSwitch {    public static void main(String[] args) {        oldSwitch();        newSwitch();    }        private static void oldSwitch() {        int size = 3;        String cn = "";        switch (size) {            case 1:                cn = "壹";                break;            case 2:                cn = "贰";                break;            case 3:                cn = "叁";                break;            default:                cn = "未知";        }        System.out.println(cn);    }    //更清新    private static void newSwitch() {        int size = 3;        String cn = switch (size) {            case 1 -> "壹";            case 2 -> "贰";            case 3, 4 -> "叁";            default -> "未知";        };        System.out.println(cn);    }}