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