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
?關鍵字,可以提高代碼的安全性、可讀性和性能。