final关键字用于限制类、方法和变量的修改:final类不可继承,如String类;final方法不可重写,保证核心逻辑不变;final变量一旦赋值不可更改,基本类型值不变,引用类型地址不变但内容可变;合理使用可提升安全性与可读性。

final 是 Java 中一个重要的关键字,用于限制类、方法和变量的修改行为。合理使用 final 可以提高程序的安全性、可读性和性能。下面从类、方法、变量三个方面说明 final 的使用方式和经验。
final 修饰类:防止继承
当一个类被 final 修饰时,该类不能被继承。
应用场景:- 设计上不希望子类改变其行为的类,如 Java 中的 String 类。
- 工具类或常量类,通常定义为 final 防止被扩展。
示例:
final class Utility {
public static void doSomething() {
// 工具方法
}
}
// 编译错误:无法继承 final 类
// class MyUtility extends Utility { }
final 修饰方法:防止重写
被 final 修饰的方法不能在子类中被重写(override),但可以被继承和调用。
立即学习“Java免费学习笔记(深入)”;
使用建议:- 父类中核心逻辑不应被修改的方法应声明为 final。
- 与 final 类结合使用,进一步保证行为一致性。
示例:
class Base {
final void printInfo() {
System.out.println("This method cannot be overridden");
}
}
class Derived extends Base {
// 编译错误:不能重写 final 方法
// void printInfo() { }
}
final 修饰变量:值不可变
final 修饰的变量一旦赋值,就不能再更改。包括基本类型和引用类型。
分类说明:- 基本类型:值不能变。例如 final int x = 10; 后续不能再赋值。
- 引用类型:引用地址不能变,但对象内部状态可以变。
示例:
final List初始化时机:list = new ArrayList<>(); list.add("hello"); // 允许:对象内容可变 // list = new ArrayList<>(); // 错误:不能重新赋值引用
- 声明时直接赋值。
- 构造函数中赋值(实例变量)。
- 静态代码块或声明时初始化 static final 变量。
使用经验与注意事项
- 尽量将不需要修改的局部变量或参数声明为 final,增强可读性与线程安全。
- public static final 常量名通常大写,多个词用下划线分隔,如 MAX_COUNT。
- final 不影响性能优化,现代 JVM 会自动优化,但语义清晰更重要。
- 匿名内部类访问的局部变量必须是 final 或“有效 final”(effectively final)。
基本上就这些。final 关键字的核心是“不可变性”,掌握它有助于写出更稳健、清晰的 Java 代码。不复杂但容易忽略细节,尤其是在变量引用和初始化时机上。










