【JAVA学习之路 | 进阶篇】Record(记录)与密封类(sealed)

简介: 【JAVA学习之路 | 进阶篇】Record(记录)与密封类(sealed)

1.Recode记录

(1). 前言

  • Recode是一种特殊的类,在java1.4时被引入.
  • 其出现的原因是我们在编写JavaBean代码时我们会写出很多繁冗的代码(诸如getter/setter方法,重载的构造器,重写的hashCode()等等),为了解决这个问题,引入了Recode记录.

(2). 例 :

在引入记录前 :

public class Employee {
    int age;
    String name;
 
    public Employee() {
        System.out.println("调用了空参构造器");
    }
 
    public Employee(int age, String name) {
        System.out.println("调用了有两个参数的构造器");
        this.age = age;
        this.name = name;
    }
 
    public Employee(int age) {
        System.out.println("调用了一个参数构造器");
        this.age = age;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Employee employee = (Employee) o;
        return age == employee.age && Objects.equals(name, employee.name);
    }
 
    @Override
    public int hashCode() {
        return Objects.hash(age, name);
    }
 
    @Override
    public String toString() {
        return "Employee{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}

在引入Recode后 :

public record Emp(int age, String name) {
}

Recode提供了构造器public Emp(int age, String name), getter()方法(注意没有setter()方法)等.

Test :

class RecodeTest{
    public static void main(String[] args) {
        Emp e = new Emp(20, "hexua");
        //默认调用e对象的重写的toString方法
        System.out.println(e);
        //获取age :
        System.out.println("年龄是" + e.age());
        //获取name :
        System.out.println("名字是" + e.age());
    }
}
 
控制台 : 
Emp[age=20, name=hexua]
年龄是20
名字是20

注 :

  • 不能显式继承其他类.
  • JavaBean是可变的,而recode是不可变的.所以不可以用recode来替代JavaBean的功能.

2.密封类(sealed关键字)

密封类是java17中引入的一个新特性,用于限制类的继承.密封类可以防止其他类继承它们.从而确保更好的类型安全性和性能.

例 :

//sealed修饰表明该类是密封类, permits指定了由哪些类来继承
sealed class Class1 permits Class2, Class3{
 
}
//Class2继承了Class1, 必须对Class1的子类进行限制, 选择其子类是由sealed修饰, 还是final, non-sealed
final class Class2 extends Class1{
 
}
non-sealed class Class3 extends Class1 {
 
}

注 :


  • 密封类可以permits指定可以由哪些类来继承该密封类.permits指定后,其子类必须显式extends继承该密封类.且其子类需要选择声明为sealed/non-sealed/final.
  • 如果其子类声明为sealed,则其子类也为密封类,可以指定由哪些类继承.
  • 如果其子类声明为final,说明该子类不能被继承.
  • 如果其子类声明为non-sealed,则该子类并无限制,与普通的类无异.
相关文章
|
2天前
|
Java 调度 开发者
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
27 10
|
5天前
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
27 4
|
5天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
21 4
|
5天前
|
存储 移动开发 算法
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
15 1
|
2月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
176 57
|
1月前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
2月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
81 8
|
2月前
|
Java Android开发
Eclipse 创建 Java 类
Eclipse 创建 Java 类
36 0
Java Record 的一些思考 - 序列化相关(下)
Java Record 的一些思考 - 序列化相关(下)
|
存储 前端开发 Java
Java Record 的一些思考 - 序列化相关(上)
Java Record 的一些思考 - 序列化相关(上)