JDK17新特性
2023-09-07 本文已影响0人
你挺ne呀
增强switch
*单个匹配
1.png
-
多个匹配
2.png -
复杂业务逻辑
3.png -
switch类型
4.png
字符串拼接
5.pnginstanceOf增强
6.pngSealed Class
- Sealed Class的定义和使用
Sealed Class(密封类)是一种在编程语言中常见的特性,用于限制继承和扩展类的范围。在Java中,Sealed Class在Java 15中被引入。
Sealed Class允许你明确指定一个类的子类可以是哪些类,并限制其他类无法继承它。这样可以在一定程度上控制类的继承关系,提供更好的封装和安全性。
在Java中,使用sealed关键字来声明一个密封类,同时使用permits关键字指定允许继承的子类。以下是一个示例:
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类,但它不是允许的子类,因此会导致编译错误。
密封类还可以与抽象类和接口一起使用,使得继承和实现更加受限。通过密封类,可以在编译时更好地控制类的继承关系,提高代码的可维护性和安全性。
- final和non-sealed
final关键字用于修饰类、方法或变量,表示它们是最终的,不可被继承(对于类)或重写(对于方法)或修改(对于变量)。在Java中,如果一个类被声明为final,则该类不能被其他类继承。
non-sealed是一个与密封类相对的概念,表示类没有被声明为密封类,即没有限制其子类的范围。在Java中,如果一个类没有使用sealed关键字声明为密封类,它就是一个非密封类,可以被其他类继承。示例如下:
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
...