Java中final关键字的核心目的是表达不可变性,提升代码可读性、安全性和并发友好性;修饰变量确保引用或值不变,修饰方法防止重写,修饰类禁止继承。
Java中使用final关键字,核心目的是明确表达“不可变性”——不是为了强行限制,而是为了让代码意图更清晰、行为更可预测、运行更安全。
被final修饰的变量一旦初始化完成,就不能再赋新值。对基本类型,值不可变;对引用类型,引用地址不可变(但对象内部状态仍可修改)。这在多线程场景下尤其关键:正确构造的final域能天然保证可见性,无需额外同步。
public static final int MAX_RETRY = 3;
final String s = new String("abc"); 中,s不能指向另一个字符串对象,但若该字符串是可变类(比如自定义的MutableData),其内部字段仍可能被修改加final的方法不能被子类重写,从而守住父类的关键逻辑边界。这不是为了性能而设的“过时优化”,而是设计契约的一部分。
final对静态方法无实际意义(语法允许但不增强约束)一个final类无法被继承,它的所有方法也自动成为final(成员变量不受影响)。这是构建稳定基础组件的常用手段。
String、Integer、LocalDateTime等
,保障不可变性与线程安全final
final不是枷锁,而是注释。它向阅读者和编译器同时传达“此处不变”的信号。