Java 中的 final 关键字有哪些用法?

推荐答案

Java 中的 final 关键字有哪些用法?

总结性回答

Java 中的 final 关键字主要有三种用法:

  1. 修饰变量:表示该变量一旦初始化后就不能被修改
  2. 修饰方法:表示该方法不能被子类重写(override)
  3. 修饰类:表示该类不能被继承

详细解释

1. final 修饰变量

final 修饰变量时,表示该变量是一个常量,一旦被赋值后就不能再改变。

// final 基本类型变量
final int MAX_VALUE = 100;
// MAX_VALUE = 200; // 编译错误,不能修改final变量

// final 引用类型变量
final List<String> names = new ArrayList<>();
names.add("Alice"); // 可以修改引用对象的内容
// names = new ArrayList<>(); // 编译错误,不能重新赋值

注意事项:

  • 基本类型:值不能改变
  • 引用类型:引用不能改变,但对象内容可以改变
  • final 变量必须在声明时或构造函数中初始化

2. final 修饰方法

final 修饰方法时,表示该方法不能被子类重写。

class Parent {
    public final void show() {
        System.out.println("Parent show");
    }
}

class Child extends Parent {
    // 编译错误,不能重写final方法
    // @Override
    // public void show() { ... }
}

使用场景:

  • 防止子类修改方法实现
  • 确保方法行为在继承体系中保持一致

3. final 修饰类

final 修饰类时,表示该类不能被继承。

final class UtilityClass {
    // 类内容
}

// 编译错误,不能继承final类
// class SubClass extends UtilityClass { ... }

使用场景:

  • 工具类通常设计为 final,如 String、Integer 等
  • 防止继承破坏类的设计初衷
  • 提高安全性,防止恶意子类化

其他注意事项

  1. final 变量命名约定:通常使用全大写字母和下划线
  2. final 和 static 结合使用可以定义类常量
  3. final 参数:方法参数声明为 final 可以防止在方法内被修改
  4. final 可以提高 JVM 优化效率