Java 档案类是用来表示不可变数据的透明载体,用来简化不可变数据的表达,提高编码效率,降低编码错误。
Java 档案类不支持扩展子句,用户不能定制它的父类。隐含的,它的父类是 java.lang.Record。父类不能定制,也就意味着我们不能通过修改父类来影响 Java 档案的行为。
Java 档案类是个终极(final)类,不支持子类,也不能是抽象类。没有子类,也就意味着我们不能通过修改子类来改变 Java 档案的行为。
Java 档案类声明的变量是不可变的变量。这就是我们前面反复强调的,一旦实例化就不能再修改的关键所在。
Java 档案类不能声明可变的变量,也不能支持实例初始化的方法。这就保证了,我们只能使用档案类形式的构造方法,避免额外的初始化对可变性的影响。
Java 档案类不能声明本地(native)方法。如果允许了本地方法,也就意味着打开了修改不可变变量的后门。
- public record Circle(double radius) {
- //构造方法,可以用于参数检查
- public Circle {
- if (radius < 0) {
- throw new IllegalArgumentException("The radius of a circle cannot be negative [" + radius + "]");
- }
- }
-
- public double area() {
- return Math.PI * radius * radius;
- }
-
- }
- public static void main(String[] args) {
- //创建实例
- Circle circle = new Circle(6);
- //访问属性
- System.out.println(circle.radius()); //6.0
- //调用方法
- System.out.println(circle.area()); //113.09733552923255
- }
和普通类比较差异