Java record类的用法(附带实例)
在 Java 程序中,定义类通常使用 class 关键字,本文讲解另一个用于定义类的 record 关键字。
record 关键字是 Java 16 正式发布的,其作用在于提供了一种更简洁、更紧凑的 final 类的定义方式。
final 类的语法如下:
例如,已知 JDK 的 java.lang 包下的 Math 数学类和 String 字符串类都是由 final 关键字修饰的类,这两个类就无法做任何类的父类,如果这两个类出现在 extends 右侧,就会发生编译错误,如下图所示。
例如,使用 class 关键字定义一个表示“时钟”的 final 类 Clock,其中包含两个被 final 修饰的变量,一个表示“时钟上有多少个小时”的 hours,另一个表示“每个小时有多少分钟”的 minutesperhour。此外,在 Clock 类中还包含了 3 个方法:
Clock 类的代码如下:
下面演示如何使用 record 关键字把上述的 final 类修改为 record 类。代码如下:
record 关键字是 Java 16 正式发布的,其作用在于提供了一种更简洁、更紧凑的 final 类的定义方式。
Java final类
定义为 final 的类不能被继承。因此,如果希望一个类不被任何类继承,并且不允许其他人对这个类进行任何改动,可以将这个类设置为 final 类。final 类的语法如下:
final 类名{}如果将某个类设置为 final 类,则该类中的所有方法都被隐式地设置为 final 方法,但是 final 类中的成员变量可以被定义为 final 或非 final 形式。
例如,已知 JDK 的 java.lang 包下的 Math 数学类和 String 字符串类都是由 final 关键字修饰的类,这两个类就无法做任何类的父类,如果这两个类出现在 extends 右侧,就会发生编译错误,如下图所示。

Java record类
实际上,record 类就是一种 final 类,即不可变类。例如,使用 class 关键字定义一个表示“时钟”的 final 类 Clock,其中包含两个被 final 修饰的变量,一个表示“时钟上有多少个小时”的 hours,另一个表示“每个小时有多少分钟”的 minutesperhour。此外,在 Clock 类中还包含了 3 个方法:
- 有参构造方法;
- 用于获取“时钟上有多少个小时”的 getHours() 方法;
- 用于获取“每个小时有多少分钟”的 getMinutesperhour() 方法。
Clock 类的代码如下:
public final class Clock { final int hours; //小时数 final int minutesperhour; //每小时的分钟数 public Clock(int hours, int minutesperhour) { this.hours = hours; this.minutesperhour = minutesperhour; } public int getHours() { return this.hours; } public int getMinutesperhour() { return this.minutesperhour; } }
下面演示如何使用 record 关键字把上述的 final 类修改为 record 类。代码如下:
public record Clock(int hours, int minutesperhour) { public int getHours() { return this.hours; } public int getMinutesperhour() { return this.minutesperhour; } }