public class B { public static B t1 = new B(); public static B t2 = new B(); static { System.out.println("靜態塊"); } { System.out.println("構造塊"); } /* * 主函數 */ public static void main(String[] args) { } }
以上代碼運行後的結果是多少?
先把答案寫出來:
構造塊
構造塊
靜態塊
- 開始
- 先聲明public static B t1並進行隱式的初始化 .
- 然後再進行顯示的初始化 , 執行new B() .
- 運行B這個類中的構造代碼塊( "構造塊" ) , 再運行構造方法 .
- 然後再聲明public static B t2並進行隱式的初始化 .
- 然後再進行顯示的初始化 , 執行new B() .
- 運行B這個類中的構造代碼塊( "構造塊" ) , 再運行構造方法 .
- 然後加載靜態代碼塊( "靜態塊" ) .
- 再運行main()方法 , 運行new B()
- 運行B這個類中的構造代碼塊( "構造塊" ) , 再運行構造方法 .
- 結束
在最開始的時候jvm虛擬機會先加載main()方法所在的類 .
先將這個類中的靜態成員變量加載到內存中並且只會運行一次 . ( 注意 : 將靜態塊視爲靜態成員變量( 本人理解 ) , 從上到下依次執行 ) .