关于java:Java14新特性及代码示例

3次阅读

共计 2867 个字符,预计需要花费 8 分钟才能阅读完成。

你好啊,我是大阳。

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);
    }
}
正文完
 0