這個程序展示了靜態(tài)初始化的各種特性。假如你初次接觸Java,結(jié)果可能令你吃驚。可能會對static后加大括號感到困惑。首先要告訴你的是,static定義的變量會優(yōu)先于任何其它非static變量,不論其出現(xiàn)的順序如何。正如在程序中所表現(xiàn)的,雖然v出現(xiàn)在v1和v2的前面,但是結(jié)果卻是v1和v2的初始化在v的前面。在static{后面跟著一段代碼,這是用來進(jìn)行顯式的靜態(tài)變量初始化,這段代碼只會初始化一次,且在類被第一次裝載時。假如你能讀懂并理解這段代碼,會幫助你對static要害字的熟悉。在涉及到繼續(xù)的時候,會先初始化父類的static變量,然后是子類的,依次類推。非靜態(tài)變量不是本文的主題,在此不做具體討論,請參考Think in Java中的講解。
public class StaticCls{ public static void main(String[] args){ OuterCls.InnerCls oi=new OuterCls.InnerCls(); }}class OuterCls{ public static class InnerCls{ InnerCls(){ System.out.println("InnerCls"); } }}
輸出結(jié)果會如你所料:
InnerCls
和普通類一樣。內(nèi)部類的其它用法請參閱Think in Java中的相關(guān)章節(jié),此處不作詳解。