Java 1.1允許我們建立“空白final”,它們屬於一些特殊的欄位。儘管被申明為final,但卻未得到一個初始值。
無論在哪種情況下,空白final都必須在實際使用前得到正確的初始化(Blank finals MUST be initialized in the constructor:)。而且,編譯器會主動保證這一規定得以貫徹。
然而,對於final 關鍵字的各種應用,空白final 具有最大的靈活性。
舉個例子來說,位於類內部的一個final 欄位現在對每個物件都可以有所不同,同時依然保持其“不變”的本質。下面列出一個例子:
/** * Created by xfyou on 2016/11/2. * 空白final演示 */ public class BlankFinal { private final int i = 0; private final int j; private final Poppet p; public BlankFinal() { j = 1; p = new Poppet(); } public BlankFinal(int j) { this.j = j; p = new Poppet(); } public static void main(String[] args) { BlankFinal bf = new BlankFinal(); } } class Poppet { }