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