JDK17新特性
文本块
jdk17之前的。
public static final String getHtmlJDK8() {
return "<html>\n" +
" <body>\n" +
" <p>Hello, world</p>\n" +
" </body>\n" +
"</html>";
}
jdk17时的。
public static final String getHtmlJDK17() {
return """
<html>
<body>
<p>Hello, world</p>
</body>
</html>
""";
}
NullPointerException 增强
提供了更详细的空指针异常信息,帮助开发者迅速定位问题源头。
Records
不如lombok好用。
public record StudentRecord(Long stuId,
String stuName,
int stuAge,
String stuGender,
String stuEmail) {
public StudentRecord {
System.out.println("构造函数");
}
public static void main(String[] args) {
StudentRecord record = new StudentRecord(1L, "张三", 16, "男", "xxx@qq.com");
System.out.println(record);
}
}
全新的switch表达式
注意这里是switch表达式,而不是语句。主要的差别就是就是表达式有返回值,而语句则没有。
私有接口方法
从Java8开始,允许在interface里面添加默认方法,其实当时就有些小困惑,如果一个default方法体很大怎么办,拆到另外的类去写吗?实在有些不太合理,所以在Java17里面,如果一个default方法体很大,可以通过新增接口私有方法来进行一个合理的拆分了。
模式匹配
模式匹配主要用于instanceof表达式。模式匹配增强了instanceof的语法和功能,使类型检查和类型转换更加简洁和高效。
jdk17之前的代码:
if (value instanceof String) {
String v = (String) value;
System.out.println("一个String类型" + v.toUpperCase());
} else {
// 其它代码
}
jdk17时:
if (value instanceof String v) {
System.out.println("一个String类型" + v.toUpperCase());
} else {
// 其它代码
}
Sealed类
Sealed类是一种新的类修饰符,用于限制类的继承。Sealed类可以控制哪些类可以继承自它,这样可以使得代码更加安全、可维护。Sealed类的使用可以在编译时强制执行一些规则,从而避免运行时错误。
实际编程中不常用。
作者:张三 创建时间:2024-11-08 16:26
最后编辑:张三 更新时间:2024-11-08 16:57
最后编辑:张三 更新时间:2024-11-08 16:57