Java14新特性及代码示例

你好啊,我是大阳。
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表达式(标准) 【Java14新特性及代码示例】上代码:
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); } }

    推荐阅读