final 关键字在 Java 中主要用于修饰变量、方法和类,用来表示不可更改的特性。具体用法如下:


1. 修饰变量(常量)

1
2
final int MAX_VALUE = 100;
MAX_VALUE = 200; // ❌ 编译错误,不能修改 final 变量
  • 修饰基本数据类型:值不能被修改。
  • 修饰引用类型:引用地址不能修改,但对象的内容可以更改。
1
2
3
final List<String> list = new ArrayList<>();
list.add("Hello"); // ✅ 可以修改内容
list = new ArrayList<>(); // ❌ 不能修改引用地址

2. 修饰方法(防止方法被重写)

1
2
3
4
5
6
7
8
9
10
11
12
class Parent {
final void show() {
System.out.println("Parent show");
}
}

class Child extends Parent {
// ❌ 编译错误,不能重写 final 方法
void show() {
System.out.println("Child show");
}
}

3. 修饰类(防止类被继承)

1
2
3
4
5
6
7
8
9
final class Animal {
void speak() {
System.out.println("Animal speaks");
}
}

// ❌ 编译错误,不能继承 final 类
class Dog extends Animal {
}

4. final 关键字的特殊用法

(1)修饰成员变量(必须初始化)

1
2
3
4
5
6
7
class Test {
final int num; // 必须在构造器或代码块中初始化

Test(int num) {
this.num = num;
}
}

(2)修饰方法参数(参数值不能被修改)

1
2
3
void print(final int x) {
x = 20; // ❌ 编译错误
}

(3)配合 static final(常量)

1
static final double PI = 3.14159;

总结

  • 修饰变量:变量值不可变(基本类型值不可变,引用类型地址不可变)。
  • 修饰方法:防止子类重写方法。
  • 修饰类:防止类被继承。

这样使用 final 主要是为了保证安全性提高程序的可读性,并且在某些情况下还能优化性能(JVM 可进行编译优化)。