final用于限制类、方法和变量的修改:final类不可被继承,如String类;final方法不可被重写,确保核心逻辑不变;final变量一旦赋值不可更改,基本类型值不变,引用类型地址不变但内容可变,常用于常量和线程安全。

在Java中,final 是一个关键字,用于限制类、方法和变量的行为。理解 final 的核心作用,有助于写出更安全、更稳定的代码。它的主要含义是“不可改变”,但具体表现形式会根据修饰对象的不同而有所区别。
final修饰类:类不可被继承
当一个类被 final 修饰时,它不能被其他类继承。这意味着该类的设计是最终的,不允许扩展。
例如:
public final class MathUtils {// 工具方法
}
如果你尝试继承这个类:
立即学习“Java免费学习笔记(深入)”;
class MyMath extends MathUtils { } // 编译错误这种设计常用于工具类(如 Java 中的 String、Integer 等),防止子类破坏原有逻辑,增强封装性和安全性。
final修饰方法:方法不可被重写
当一个方法被 final 修饰时,子类不能覆盖(override)该方法。这保证了某些关键行为在继承体系中保持不变。
例如:
class Parent {public final void printInfo() {
System.out.println("This cannot be overridden");
}
}
class Child extends Parent {
@Override
public void printInfo() { } // 编译错误
使用 final 方法可以保护核心逻辑不被篡改,同时仍允许类被继承(只要类本身不是 final)。
final修饰变量:值不可更改
final 修饰变量时,表示该变量一旦赋值,就不能再修改。根据变量类型不同,含义略有差异。
- 对于基本类型(int、double等),值不能变
- 对于引用类型(对象、数组),引用地址不能变,但对象内部状态可以变
例如:
final int x = 10;x = 20; // 编译错误
final List
list.add("hello"); // 合法:对象内容可变
list = new ArrayList(); // 编译错误:引用不能变
final 变量通常用于定义常量或确保线程安全(配合 static 使用)。
注意:final 变量可以在声明时赋值,也可以在构造函数或初始化块中赋值,称为“空白 final”,但必须保证只赋值一次。
总结与使用建议
final 的核心是提供不可变性保障:
- final 类防止继承,适合设计稳定接口或工具类
- final 方法防止重写,保护关键逻辑
- final 变量防止重新赋值,提升代码可读性和线程安全
合理使用 final 能让代码更清晰、更健壮。特别是在多线程环境下,不可变对象天然线程安全,是构建并发程序的重要基础。
基本上就这些。掌握 final 的三种用法,能帮助你更好地控制代码的扩展性和稳定性。










