final 關鍵字意義上是不可變更的,創造final關鍵字,原因有兩個1.爲了設計design 2.爲了效率 efficiency(書上很少提到這一部分,而且JRE 5以後編譯器對沒有final的效率做了很大提升)。final關鍵字可以加在data, arguments, method, class之前,下面針對每種情況進行解釋。
final data
private final int valueOne = 1;
private static final int VALUE_TWO = 2;
2. 可是一個運行時的常量,在聲明的時候賦予一個不確定的值,例如
private final int valueThree = random.nextInt(10);
private static final Value VALUE_FOUR = new Value(7);
3. blank finals, 變量可以被聲明爲final,確不在聲明時進行初始化賦值,但是編譯器保證所有的blank final必須要在使用前進行初始化,例如
public class BlankFinal {
private final int valueFive; //black final
public BlankFinal() {
valueFive = 5; //initialized
}
}