三个层面的用法:1)修饰变量——基本类型值不可改,引用类型引用不可改(但指向的对象内容仍可改,final List 仍能 add);局部变量/参数可用 final 或 effectively final,lambda 捕获要求后者;2)修饰方法——禁止子类重写(模板方法中固定骨架步骤);3)修饰类——禁止继承(String、Integer),保证行为不被子类破坏,是安全与不变性设计的手段。

对并发的意义是常被低估的一点:JMM 为 final 域提供特殊的初始化安全语义——构造函数内对 final 域的写入,与「构造完成后其他线程读到该对象引用」之间建立 happens-before,不需要额外同步就能保证其他线程看到 final 域的正确初始化值。这正是不可变对象可安全发布的基础。前提:构造过程中不能让 this 逃逸(如在构造器里把自己注册到监听器),否则其他线程可能读到未初始化完成的 final 域。追问方向:final 语义在 JLS 17.5 的具体规则(写 final 域后 freeze 动作)、static final 常量与类初始化的关系、record 类字段全 final 的设计取向。

(约 400 字)