JDK17新特性

2023-09-07  本文已影响0人  你挺ne呀

增强switch

*单个匹配


1.png

字符串拼接

5.png

instanceOf增强

6.png

Sealed Class

public sealed class Vehicle permits Car, Motorcycle {
    // 密封类的定义
}

final class Car extends Vehicle {
    // Car类是Vehicle类的子类,符合密封类的限制
}

final class Motorcycle extends Vehicle {
    // Motorcycle类是Vehicle类的子类,符合密封类的限制
}

class Truck extends Vehicle {
    // Truck类不是Vehicle类的允许子类,会导致编译错误
}

在上面的示例中,Vehicle是一个密封类,允许Car和Motorcycle作为它的子类。Truck类试图继承Vehicle类,但它不是允许的子类,因此会导致编译错误。
密封类还可以与抽象类和接口一起使用,使得继承和实现更加受限。通过密封类,可以在编译时更好地控制类的继承关系,提高代码的可维护性和安全性。

public class NonSealedClass {
    // ...
}

class SubClass extends NonSealedClass {
    // ...
}

在这个示例中,NonSealedClass是一个非密封类,可以被其他类(如SubClass)继承。


Record 类

Record类是Java 14中引入的一种新的类类型,用于简化创建不可变数据对象的过程。它是一种特殊的类,具有自动生成的方法和属性,以及隐式的不可变性。
使用record关键字可以声明一个记录类。以下是一个示例:

public record Person(String name, int age) {
    // 记录类的定义
    // ...
}

在上面的示例中,Person被声明为一个记录类,它具有两个属性:name和age。记录类会自动为这些属性生成equals()、hashCode()和toString()等方法,以及一个构造函数来初始化这些属性。
与普通类不同,记录类的属性是不可变的,即它们的值在创建后不能被修改。记录类还提供了一种简洁的语法来创建实例,并可以使用点号(.)访问属性值。
以下是使用记录类的示例:

Person person = new Person("Alice", 25);
System.out.println(person.name()); // 输出:"Alice"
System.out.println(person.age()); // 输出:25

可以通过使用record关键字和定义属性来轻松定义记录类,并且它们提供了一种简洁的方式来处理不可变数据。记录类在减少样板代码的同时,提供了更好的可读性和易用性。


空指针异常

抛出NullPointerException时,精确定位空指针异常


ZGC

...

上一篇下一篇

猜你喜欢

热点阅读