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
关键字,可以提高代码的安全性、可读性和性能。