JDK 14 在上个月已经发布,在众多新特性中,有几个比较重要和实用的特性,我们有必要了解一下,下面一一讲解。
JDK 14 请点击这里下载:jdk-14.0.1_windows-x64_bin.exe官方镜像版
Instanceof是java中用于检查对象引用是否为给定Type类型的实例,并返回布尔值。在Java 14之前,我们在完成判断之后,经常需要做一下类型的强制转换,如下:
if (obj instanceof String) {
String nowJava = (String) obj;
System.out.println(nowJava);
}
上述示例中,为了能够安全地将obj转为我们期望的String类型,需要通过instanceof运算符对obj进行类型判断。这里发生了三件事:
这种模式很简单,并且所有Java程序员都可以理解,但代码有点啰嗦,看在JDK 14中的简单写:
if (obj instanceof String nowJava) {
System.out.println(nowJava);
}
这样是不是就简练多了。
NullPointerException 是Java开发中经常会遇到的异常。在JDK 14之前的版本中,NullPointerException 异常的消息只是简单的null,并不会告诉你任何有用的信息,只能根据异常产生的源文件的行号来查找。对于很长的引用链来说,很难定位到底是哪个对象为null。比如,类似a.b.c.d这样的引用方式,a、b和c中的任何一个为null,都会出现 NullPointerException 异常。仅靠行号无法快速定位问题所在。
在下面的代码中,对b.a.doSomething()的调用会出现 NullPointerException 异常。
public class NPE {
private static class A {
void doSomething() {}
}
private static class B {
A a;
}
public static void main(String[] args) {
B b = new B();
b.a.doSomething();
}
}
直接运行该文件的错误信息如下所示,从中我们只可以知道错误出现在14行。Exception in thread "main" java.lang.NullPointerException
at io.vividcode.javafeatures.NPE.main(NPE.java:14)
增强了对NullPointerException异常的处理,可以显示更详细的信息:Exception in thread "main" java.lang.NullPointerException: Cannot invoke "io.vividcode.javafeatures.NPE$A.doSomething()" because "<local1>.a" is null
at io.vividcode.javafeatures.NPE.main(NPE.java:14)
在JDK 14中Switch表达式变化包括如下几个内容:
可以使用箭头标签进行匹配。当箭头标签匹配时,只有对应的语句或表达式会执行,没有fall-through。下面代码中的printDays()方法使用箭头标签匹配days的值。不允许fall-through可以避免很多潜在的问题。
void printDays(int days) {
switch (days) {
case 0 -> System.out.println("None");
case 1 -> System.out.println("1 day");
default -> System.out.println(days + " days");
}
}
还可以:
var returnString = switch (event) {
case PLAY -> System.out.println("User has triggered the play button");
case STOP, PAUSE -> System.out.println("User needs a break");
default -> {
String message = event.toString();
LocalDateTime now = LocalDateTime.now();
System.out.println("Unknown event " + message + " logged on " + now);
}
};
Java语言增加文本块功能。文本块是多行字符串文字,能避免大多数转义。
我们通常是这样做的:
本文系作者在时代Java发表,未经许可,不得转载。
如有侵权,请联系nowjava@qq.com删除。