平台奖励创作,可能会升级VIP文章,可以移步我的公众号:【编程朝花夕拾】,且可获取首发内容。
01 引言
接上一期,我们继续介绍有趣的神仙语法。
02 神仙语法
2.1 Try-with-resources 增强
Try-with-resources
允许有效地使用最终变量,该增强来自JDK9。Try-with-resources
自动帮我们关闭流的资源,防止遗忘造成资源浪费。
JDK9之前,只能这样写,写在外面会编译不通过:
try (FileInputStream fis = new FileInputStream("test.txt")) {
// ...
}
JDK之后,可以使用外部的流:
FileInputStream fis = new FileInputStream("test.txt");
try (fis) {
// ...
}
看似简单的改变,但是在平时编码中会变的很方面,代码也会显的整齐。
2.2 instanceof 模式匹配
该方法用来判断是不是属于某一种类型,常用于多态中。如果是就可以强制转换。现在就可以不需要显式的强制转化了。该功能来自JDK16。
JDK16之前的类型转化:
Object a = 1;
if (a instanceof Integer) {
Integer aa = (Integer) a;
System.out.println(aa + 1);
// 打印结果:2
}
JDK16之后的类型转化:
Object a = 1;
if (a instanceof Integer aa) {
System.out.println(aa + 1);
// 打印结果:2
}
是不是又省了一行代码,哈哈
2.3 更友好的空指针异常信息
空指针(NullPointerException
)简称NPE
。这个异常是每个开发都会遇到的异常,因为数据的缺失,直接调用方法,就是出现NPE
, 尤其在链式调用的,根本无法确定是哪一个方便导致的NPE
。JDK15里面正式优化。
JDK15之前的NPE
:
Test test = new Test();
System.out.println(test.getContent().length());
报错信息只有行数,没有更加详细的信息;
JDK15之后的NPE
报错,直接告诉是哪一个字段。
这个报错提示简直就是开发者的福音了,可以迅速定位NPE
的位置。
2.4 Record 类型
定义不可变类,用于快速构造一个类,只对外提供Getter方法
,不需要Getter
、Setter
方法。笔者最先接触还是在Scala的语法中认识的,看来Java是吸收了Scala的一部分思想。该方法来自JDK16.
@Test
void test07() {
record Location(int x, int y){}
Location location = new Location(5,9);
System.out.println(location);
System.out.println(location.x());
System.out.println(location.x);
System.out.println(location.y());
System.out.println(location.y);
}
运行结果:
是不是比平时定义的类方便太多。
2.5 var关键字
var
是Java 10中引入的一个新特性,用于局部变量类型推断,它允许编译器在编译时自动推断变量的类型,从而简化代码书写和增强代码可读性。最开始接触适用于JS
的语言中,现在Java也可以使用了。
var list = List.of(1, 2, 3, 4, 1);
var str = RandomUtil.randomInt(5);
它会根据上下文判断接受的变量是什么属性。
03 小结
今天的语法就分享到这里。后面在总结一些语法,我们接着唠。