final关键字
final 表示“不可改变”,但修饰不同对象时含义不同。
final 修饰类
final class 不能被继承。
public final class String {
}常见例子:String、Math、包装类等。
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。
- 对可变对象做防御性拷贝。