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 可进行编译优化)。