美文网首页
JDK17新特性

JDK17新特性

作者: 你挺ne呀 | 来源:发表于2023-09-07 15:03 被阅读0次

    增强switch

    *单个匹配


    1.png
    • 多个匹配


      2.png
    • 复杂业务逻辑


      3.png
    • switch类型


      4.png

    字符串拼接

    5.png

    instanceOf增强

    6.png

    Sealed 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

    ...

    相关文章

      网友评论

          本文标题:JDK17新特性

          本文链接:https://www.haomeiwen.com/subject/smilvdtx.html