- try-with-resources
// 操作资源,正常是在 finally内进行关闭流
// java7之后 try-with-resources 不需要再关闭流 只需要写在try(内)
try (FileInputStream fileInputStream = new FileInputStream("aaa.txt");) {
// java9 对 try-with-resources再次改造,可在try()外面声明
FileInputStream fileInputStream = new FileInputStream("aaa.txt");
try (fileInputStream) {
byte[] bytes = new byte[1024];
int len;
while ((len = fileInputStream.read(bytes)) != -1) {
System.out.println(new String(bytes, 0, len));
}
} catch (Exception e) {
e.printStackTrace();
}
- switch增强:java13后可接收返回值
int month = 5;
// 正常写法
String reason = switch (month) {
case 1:
case 2:
case 3:
yield "春天";
case 4:
case 5:
case 6:
yield "夏天";
default:
throw new Exception("无法匹配");
};
// java12 增强写法
reason = switch (month) {
case 1, 2, 3 -> "春天";
case 4, 5, 6 -> "夏天";
default -> throw new Exception("无法匹配");
};
- java10 局部变量类型判断 不建议使用
var i = 10;
- instanceof的模式匹配
// 以前
Animal a = new Cat();
if (a instanceof Cat) {
Cat b = (Cat) a;
b.eat();
}
// java16 使用instanceof的模式匹配后
if (a instanceof Cat c) {
c.eat();
}
- 文本块
java12新增
在java14版本中,针对文本块又新增两个特性(阅览)。
1)在一行的结尾增加"\"可以取消改行的换行符;
2)可以通过"\s"增加空格。
String str = """
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
</html>
""";
- Record类型:java19开始,专门做纯数据载体,可以将这种类型定义为Record。
状态声明中的每个属性,都是默认采用了private和final修饰,则属性值就不可修改,本质还是class,只不过简化了编码的过程。
在Record类中,默认已经重写了0bject类提供的equals(),hashcode(),toString()方法
在Record类中,默认提供全参的构造方法,并且提供的getter方法名和属性名保持一致。
Record类采用了final修饰,并且显示的继承于java.lang.Record类,因此就不能继承别的父类。
其他使用方式和普通类一样
声明Record类
package com.lambda;
public record Users(String name, int age) {
}
使用
Users user = new Users("John", 18);
System.out.println(user.name());
System.out.println(user.age());
System.out.println(user.toString());
System.out.println(user.hashCode());
- 密封类、密封接口 java15
定义的类只允许指定类可以继承,防止代码意外扩展
// 只允许Teacher, Student, Worker 可以继承,其他类不能继承
sealed class Person permits Teacher, Student, Worker {}
// 当一个类继承了密封类后,该类必须使用 final non-sealed sealed 这三个关键字中的一个
// sealed 密封的,后面使用permits指定限定继承类
// final 最终的
// non-sealed 非密封的
final class Teacher extends Person {}
non-sealed class Student extends Person {}
sealed class Worker extends Person permits OtherWorker {}
non-sealed class OtherWorker extends Worker {}