final是Java中用于实现不可变性的关键字,可修饰变量、方法和类。① final变量值不可变,基本类型值恒定,引用类型地址不变但内容可修改,且必须显式初始化;② final方法不能被子类重写,保障核心逻辑安全并可能提升性能;③ final类不可被继承,如String类,常用于构建线程安全的不可变类;④ 实际应用中,final有助于多线程安全、Lambda表达式使用及代码可靠性提升,体现通过限制变化来增强代码稳定性的编程思想。

在Java中,final 是一个关键字,用于限制变量、方法或类的修改行为。它体现了“不可变性”的核心思想,是编写安全、稳定代码的重要工具。理解 final 的使用,关键在于掌握它在不同上下文中的语义和作用。
final 变量:值不可更改
当一个变量被声明为 final,表示它的值一旦赋值后就不能再改变。
• 对于基本数据类型(如 int、double),final 保证其值恒定。• 对于引用类型(如对象、数组),final 保证引用地址不变,但对象内部状态仍可修改。
• final 变量必须在声明时或构造器中完成初始化,否则编译报错。
示例:
final int MAX = 100; // MAX = 200; // 编译错误 final Listlist = new ArrayList<>(); list.add("hello"); // 合法:对象内容可以变 // list = new ArrayList<>(); // 编译错误:引用不能重新赋值
final 方法:防止被重写
将方法声明为 final,意味着子类不能覆盖(override)该方法。
立即学习“Java免费学习笔记(深入)”;
• 常用于设计框架或类库时,保护核心逻辑不被篡改。• 提高方法调用效率,JVM 可能进行内联优化。
例如:
class Parent {
final void printInfo() {
System.out.println("This cannot be overridden");
}
}
class Child extends Parent {
// void printInfo() {} // 编译错误
}
final 类:不可被继承
一个被声明为 final 的类不能被其他类继承。
• 典型例子是 Java 标准库中的 String、Integer 等包装类。• 用于创建不可变类(immutable class),增强安全性与线程安全。
例如:
final class MathUtils {
public static int add(int a, int b) {
return a + b;
}
}
// class MyUtils extends MathUtils { } // 编译错误
final 的实际应用场景
合理使用 final 能提升代码质量:
• 在多线程环境中,final 变量能保证初始化安全性,避免可见性问题。• 配合 private 和不可变对象,构建线程安全的类。
• Lambda 表达式中引用的局部变量必须是 final 或“实际上的 final”(effectively final)。
基本上就这些。final 不只是语法限制,更是一种编程思维——通过限制变化来换取更高的可靠性与可维护性。正确使用它,能让代码更清晰、更安全。










