你好啊,我是大阳。
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); }}