為 Java 中的靜態 final 變數分配值\n
在 Java 中,非靜態 final 變數可以在兩個地方賦值。
宣告時。
在建構函式中。
示例
public class Tester {
final int A;
//Scenario 1: assignment at time of declaration
final int B = 2;
public Tester() {
//Scenario 2: assignment in constructor
A = 1;
}
public void display() {
System.out.println(A + ", " + B);
}
public static void main(String[] args) {
Tester tester = new Tester();
tester.display();
}
}輸出
1, 2
但是在靜態 final 的情況下,變數不能在建構函式中賦值。編譯器會丟擲一個編譯錯誤。靜態 final 變數需要在靜態程式碼塊或宣告時賦值。所以靜態 final 變數可以在以下兩個地方賦值。
宣告時。
在靜態程式碼塊中。
示例
public class Tester {
final int A;
//Scenario 1: assignment at time of declaration
final int B = 2;
public Tester() {
//Scenario 2: assignment in constructor
A = 1;
}
public void display() {
System.out.println(A + ", " + B);
}
public static void main(String[] args) {
Tester tester = new Tester();
tester.display();
}
}輸出
1, 2
靜態 final 變數有此行為的原因很簡單。靜態 final 在所有物件之間共享,如果允許在建構函式中賦值,那麼在建立物件時,此變數將按物件進行更改,因此不會一次性賦值。
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
JavaScript
PHP