一個類中靜態成員變量和靜態代碼塊執行先後的相關問題

                                                      

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) {
		
	}
}

以上代碼運行後的結果是多少?

先把答案寫出來:   

   構造塊

   構造塊

   靜態塊

 

  1. 開始
  2. 先聲明public static B t1並進行隱式的初始化 .
  3. 然後再進行顯示的初始化 , 執行new B() .
  4. 運行B這個類中的構造代碼塊( "構造塊" ) , 再運行構造方法 .
  5. 然後再聲明public static B t2並進行隱式的初始化 .
  6. 然後再進行顯示的初始化 , 執行new B() .
  7. 運行B這個類中的構造代碼塊( "構造塊" ) , 再運行構造方法 .
  8. 然後加載靜態代碼塊( "靜態塊" ) .
  9. 再運行main()方法 , 運行new B()
  10. 運行B這個類中的構造代碼塊( "構造塊" ) , 再運行構造方法 .
  11. 結束

 

 

在最開始的時候jvm虛擬機會先加載main()方法所在的類 .

先將這個類中的靜態成員變量加載到內存中並且只會運行一次 . ( 注意 :  將靜態塊視爲靜態成員變量( 本人理解 ) , 從上到下依次執行 ) .

 

發佈了17 篇原創文章 · 獲贊 5 · 訪問量 1359
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章