final关键字在java中表示不可变:修饰变量时值或引用不可再改,修饰方法时禁止子类覆盖。基本类型值不可变,引用类型仅地址不可变;final方法可继承调用但不可重写,private方法隐式final,与abstract互斥。

final 关键字在 Java 中用于表达“不可变”这一核心语义,修饰变量和方法时各有明确规则和典型用途。
final 修饰变量:值或引用一旦确定就不能再改
final 变量必须且只能初始化一次,之后不能再赋新值。具体表现取决于变量类型:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
基本类型:值不可变。例如
final int x = 5;,后续写x = 10;会编译报错。 -
引用类型:引用地址不可变,但对象内部状态可以修改。例如
final List<string> list = new ArrayList();</string>,允许调用list.add("a"),但不允许list = new LinkedList();。 - 成员变量:必须在声明时、构造方法中或实例代码块里完成初始化;否则编译不通过。
- 静态成员变量:必须在声明时或静态代码块中初始化。
- 局部变量:声明后需在使用前赋值一次,之后不可重赋;在 lambda 或匿名内部类中被访问时,也必须是 effectively final(即事实上的不可变)。
final 修饰方法:禁止子类覆盖,锁定行为逻辑
被 final 修饰的方法可以被继承和调用,但子类不能重写它:
- 子类中若尝试用
@Override重新定义该方法,编译器直接报错。 - 常见于模板方法模式中的固定步骤,或关键业务逻辑(如安全校验、资源清理)防止被意外篡改。
- private 方法隐式为 final,无需显式写出。
- 注意:final 方法与 abstract 方法互斥,不能同时使用。
实际编码中要注意的细节
final 不等于“对象不可变”,只约束变量本身;想真正实现不可变对象,还需确保类的设计(如所有字段 private + final + 不提供修改方法)和所依赖对象本身也是不可变的(如 String、Integer)。合理使用 final 能提升代码可读性、线程安全性,并辅助编译器优化。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










