final关键字

final 表示“不可改变”,但修饰不同对象时含义不同。

final 修饰类

final class 不能被继承。

public final class String {
}

常见例子:StringMath、包装类等。

final 修饰方法

final 方法不能被子类重写。

class Parent {
    public final void show() {
        System.out.println("固定逻辑");
    }
}

适合不希望子类改变的关键逻辑。

final 修饰变量

变量只能赋值一次。

final int x = 10;

基本类型

值不能再改。

引用类型

引用地址不能再改,但对象内部状态可能还能改。

final int[] arr = {1, 2, 3};
arr[0] = 99;      // 可以
// arr = new int[3]; // 不可以

常量

常量通常写成:

public static final int MAX_SIZE = 100;

命名习惯:全大写,单词之间用下划线。

和不可变类的关系

不可变类通常会:

  • 类用 final 修饰,防止子类破坏规则。
  • 字段用 private final 修饰。
  • 不提供 setter。
  • 对可变对象做防御性拷贝。

相关:子类与继承static关键字封装