final关键字

final关键字

final: final用于修饰类、成员变量和成员方法。final修饰的类,不能被继承(String、StringBuilder、StringBuffer、Math,不可变类),其中所有的方法都不能被重写,但是可以被重载

所以不能同时用abstractfinal修饰类(abstract修饰的类是抽象类,抽象类是用于被子类继承的,和final起相反的作用)

final修饰的方法不能被重写,但是子类可以用父类中final修饰的方法。

final修饰成员变量

final修饰的成员变量是不可变的。

  1. 如果成员变量是基本数据类型,初始化之后成员变量的值不能被改变。
  2. 如果成员变量是引用类型,那么它只能指向初始化时指向的那个对象,不能再指向别的对象,但是对象当中的内容是允许改变的。

1

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),则内容可以修改(增删元素)。
posted @ 2025-03-13 19:29  狐狸胡兔  阅读(23)  评论(0)    收藏  举报