Java final关键字规范说明
一、final修饰方法
定义:声明为final
的方法称为最终方法,不允许被子类重写。
特点:
- 方法实现固定,确保核心逻辑不被修改
- 编译期检查重写限制
- 常用于模板方法模式中的固定步骤
示例:
class BaseClass {
public final void criticalOperation() {
// 核心操作逻辑
}
}
class SubClass extends BaseClass {
// 编译错误:无法重写final方法
@Override
public void criticalOperation() {}
}
二、final修饰类
定义:声明为final
的类称为最终类,不能被其他类继承。
特点:
- 类功能完整,禁止扩展
- 保证类的行为不被篡改
- 常见于工具类(如
java.lang.Math
)
示例:
final class UtilityClass {
public static void helperMethod() {
// 工具方法实现
}
}
// 编译错误:无法继承final类
class ExtendedClass extends UtilityClass {}
三、final修饰变量
定义:声明为final
的变量称为常量,初始化后不可修改。
3.1 基本数据类型变量
规则:值不可变
示例:
final int MAX_COUNT = 100;
MAX_COUNT = 200; // 编译错误:不可修改值
3.2 引用数据类型变量
规则:
- 对象地址不可变
- 对象内部状态可变
示例:
final List<String> dataList = new ArrayList<>();
dataList.add("item1"); // ✔️ 允许修改内容
dataList = new LinkedList<>(); // ❌ 编译错误:地址不可变
注意事项:
- 必须显式初始化(直接赋值/构造器初始化)
- 静态final常量建议使用
static final
组合 - 引用类型常量的内容修改需谨慎控制
附录:final使用规范
- 命名约定:常量全大写+下划线(
MAX_VALUE
) - 线程安全:final变量保证构造完成时的可见性
- 设计原则:
- 工具类建议声明为final
- 核心算法方法建议使用final修饰
- 需要防止修改的配置参数使用final常量
本说明严格遵循Java语言规范(JLS §17.5),适用于JDK 8+版本环境。