一、instanceof的模式匹配
Instanceof是java中用于检查对象引用是否为给定Type类型的实例,并返回布尔值。在Java 14之前,我们在完成判断之后,经常需要做一下类型的强制转换,如下:
Java 14增强功能特性:
注意:仅当object不为null时,instanceOf才会匹配,然后仅将其分配给str。在instanceof中使用模式匹配可以减少Java程序中显式强制转换的数量。
二、空指针异常信息
在java 14之前,我们经常在调试代码的时候,发现一行代码中有多个对象,抛出异常之后你也无法确定到底是哪个对象为null。假设此代码中出现一个NullPointerException:
a.b.c.i= 99;
//下面是异常信息
Exception in thread "main" java.lang.NullPointerException
at Prog.main(Prog.java:5)
文件名和行号不能精确指出哪个变量为空。是a还是b或c?JDK14对此做了改进,使空指针信息更详细。
Exception in thread "main" java.lang.NullPointerException:
Cannot read field 'c' because 'a.b' is null.
at Prog.main(Prog.java:5)
但是,这也存在一些风险。空指针异常消息包含源代码中的变量名。暴露此信息可能被视为程序的安全风险。
三、switch表达式
在Java 14之前:
可以看到在JDK14中一个case可以进行多个参数的匹配。
四、record关键字
Java 14使用record关键字来减少类声明语法,这有点像lombok。我们有时候需要编写许多低价值的重复代码来实现一个简单的数据载体类:构造函数,访问器,equals(),hashCode(),toString()等。为了避免这种重复代码,Java 14推出record。java14之前的代码:
Java 14中就用这一行代码:
record Point(int x, int y) { }
五、文本块
在Java中,要将HTML,XML,SQL或JSON代码片段嵌入到代码中通常很难阅读,为了克服此问题,Java 14引入了Text Block。java14之前,没有文本块的HTML示例:
省略了"+"号,代码更加直观易看。