Java 中的 final 关键字有哪些用法?
推荐答案
Java 中的 final 关键字有哪些用法?
总结性回答
Java 中的 final
关键字主要有三种用法:
- 修饰变量:表示该变量一旦初始化后就不能被修改
- 修饰方法:表示该方法不能被子类重写(override)
- 修饰类:表示该类不能被继承
详细解释
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 等
- 防止继承破坏类的设计初衷
- 提高安全性,防止恶意子类化
其他注意事项
- final 变量命名约定:通常使用全大写字母和下划线
- final 和 static 结合使用可以定义类常量
- final 参数:方法参数声明为 final 可以防止在方法内被修改
- final 可以提高 JVM 优化效率