1. final
变量
名称:
final
变量(常量)。作用:一旦赋值后,值不能被修改。
分类:
final
实例变量:必须在声明时或构造函数中初始化。final
静态变量:必须在声明时或静态代码块中初始化。
示例:
class Example {
final int instanceVar = 10; // final 实例变量
final static int staticVar; // final 静态变量
static {
staticVar = 20; // 在静态代码块中初始化
}
Example(int value) {
// instanceVar = value; // 错误:final 实例变量已经初始化
}
}
2. final
方法
名称:
final
方法。作用:不能被子类重写(Override)。
示例:
class Parent {
final void display() {
System.out.println("This is a final method.");
}
}
class Child extends Parent {
// void display() { // 错误:不能重写 final 方法
// System.out.println("Trying to override final method.");
// }
}
3. final
类
名称:
final
类。作用:不能被继承。
final class FinalClass {
void display() {
System.out.println("This is a final class.");
}
}
// class SubClass extends FinalClass { // 错误:不能继承 final 类
// }
4. final
参数
名称:
final
参数。作用:在方法内部不能修改参数的值。
示例:
void printMessage(final String message) {
// message = "New Message"; // 错误:不能修改 final 参数
System.out.println(message);
}
5. final
与匿名内部类
名称:
final
局部变量(用于匿名内部类)。作用:在匿名内部类中使用的局部变量必须是
final
或等效于final
(即不可变)。
示例:
void printMessage() {
final String message = "Hello"; // final 局部变量
Runnable r = new Runnable() {
public void run() {
System.out.println(message); // 在匿名内部类中使用
}
};
new Thread(r).start();
}
6. final
与多线程
名称:
final
字段(用于多线程安全)。作用:
final
字段在构造函数完成后是线程安全的,其他线程可以看到正确的初始化值。
示例:
class SafePublication {
final int value;
SafePublication(int value) {
this.value = value; // 构造函数中初始化 final 字段
}
void printValue() {
System.out.println(value);
}
7. final
与不可变对象
名称:不可变对象(Immutable Object)。
作用:通过将类的字段声明为
final
,可以创建不可变对象。
示例:
final class ImmutablePoint {
private final int x;
private final int y;
public ImmutablePoint(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
8. final
与静态常量
名称:静态常量。
作用:通过
static final
定义全局常量。
示例:
class Constants {
public static final double PI = 3.14159; // 静态常量
public static final String APP_NAME = "MyApp";
}
总结
类型 | 名称 | 作用 | 示例 |
---|---|---|---|
final 变量 |
final 变量(常量) |
值不可变 | final int x = 10; |
final 方法 |
final 方法 |
不能被子类重写 | final void display() { ... } |
final 类 |
final 类 |
不能被继承 | final class FinalClass { ... } |
final 参数 |
final 参数 |
方法内部不能修改参数值 | void print(final String message) { ... } |
final 局部变量 |
final 局部变量 |
匿名内部类中使用的局部变量必须是 final |
final String msg = "Hello"; |
final 字段 |
final 字段 |
多线程安全,构造函数完成后不可变 | final int value; |
不可变对象 | 不可变对象 | 通过 final 字段实现不可变性 |
final class ImmutablePoint { ... } |
静态常量 | 静态常量 | 通过 static final 定义全局常量 |
public static final double PI = 3.14159; |
通过合理使用 final
关键字,可以提高代码的安全性、可读性和性能。