final关键字
final关键字
final: final用于修饰类、成员变量和成员方法。final修饰的类,不能被继承(String、StringBuilder、StringBuffer、Math,不可变类),其中所有的方法都不能被重写,但是可以被重载。
所以不能同时用abstract和final修饰类(abstract修饰的类是抽象类,抽象类是用于被子类继承的,和final起相反的作用)
final修饰的方法不能被重写,但是子类可以用父类中final修饰的方法。
final修饰成员变量
final修饰的成员变量是不可变的。
- 如果成员变量是基本数据类型,初始化之后成员变量的值不能被改变。
- 如果成员变量是引用类型,那么它只能指向初始化时指向的那个对象,不能再指向别的对象,但是对象当中的内容是允许改变的。

TALKING_USER的内容是可以修改的。
不可变列表
如果希望列表内容不可变,需显式创建不可变集合。
private static final List<String> IMMUTABLE_LIST = Collections.unmodifiableList(
Arrays.asList("A", "B", "C")
);
// 或者 Java 9+ 的 List.of()
private static final List<String> IMMUTABLE_LIST = List.of("A", "B", "C");
此时调用 add() 或 remove() 会抛出 UnsupportedOperationException。
总结
一个变量被设置为final,它的引用(reference)不可变,但集合内部的内容仍然可以修改。
final修饰变量时,表示变量指向的对象引用不可变(不能重新赋值给其他对象)。- 但对象本身的内容是否可变,取决于对象类型:
- 如果对象是不可变的(如
String),则内容不可修改。 - 如果对象是可变的(如
ArrayList),则内容可以修改(增删元素)。
- 如果对象是不可变的(如

浙公网安备 33010602011771号