`final` 是 Java 中的一个关键字,主要用于以下场景,具有以下特性:
一、修饰成员变量(常量)
当 `final` 修饰成员变量时,表示该变量为常量,其值在初始化后不可更改。基本数据类型(如 `int`、`double`)会被初始化为默认值(如 `0`、`0.0`),引用类型(如对象、数组)的引用不可变,但对象内容仍可修改。
示例:
```java
public class Test {
final int i = 10; // 常量
final String name = "Java"; // 常量
// final int j; // 编译错误,必须初始化
}
```
二、修饰类
当类被声明为 `final` 时,该类不能被其他类继承。例如 `String` 类就是 `final` 类型,无法被继承。
示例:
```java
final class FinalClass {
// 类体
}
// 下面这行代码会编译错误
// class SubClass extends FinalClass { }
```
三、修饰方法
不可重写:`final` 方法不能被子类重写,但可以被重载;
可重载:与重写不同,重载是指在父类中定义多个同名但参数不同的方法,与子类无关。
示例:
```java
public class Base {
final void display() {
System.out.println("This method cannot be overridden");
}
void display(String msg) {
System.out.println(msg);
}
}
class SubClass extends Base {
// 下面这行代码会编译错误,无法重写 final 方法
// @Override
// void display() { ... }
}
```
四、修饰局部变量和参数
局部变量:在方法内部声明的 `final` 变量,初始化后不可修改;
方法参数:传递给方法的参数若声明为 `final`,则方法内部无法修改该参数的值。
示例:
```java
public void process(int[] array) {
final int size = array.length; // 局部常量
// array = 10; // 编译错误,无法修改数组元素
// size = 20; // 编译错误,无法修改常量
}
```
总结
`final` 的核心作用是 不可变性,通过限制变量修改、类继承和方法重写,提高代码的安全性和可维护性。其应用场景覆盖了变量、方法和类,是 Java 面向对象编程中不可或缺的关键字。