黑馬程序員_對象初始化過程

---------------------- android培訓 、 java培訓 、 期待與您交流! ----------------------


對象初始化過程

1.加載類

2.堆內存分配空間

3.屬性進行默認初始化

4.調用構造函數----->1.構造函數默認第一句super();   2.顯示初始化    3.構造代碼塊初始化

5.調用父類構造函數----->同上

6.屬性顯示初始化

7.構造代碼塊初始化

8.構造函數自定義初始化

注意:不創建對象,構造代碼塊和構造器都不運行。

運行過程--->new 對象  先執行靜態代碼塊--->在執行構造代碼塊--->再執行構造代碼塊裏面的內容

加載過程--->先加載靜態(...)--->構造函數--->在構造函數里加載構造代碼塊。

結合實例分析:

class Demo
{
	static int i=2;//隨着類的加載而加載。加載到方法區中的靜態區中。
	int j=9;//定義了一個屬性,也就是一個成員變量,也叫實例變量。當對象存在時,該變量存在於堆內存的對象中。

	static{//靜態代碼塊。隨着類的加載而執行。
	   System.out.println("靜態代碼塊...i="+i);
	}
	
	Demo(int a){//帶一個int參數的構造函數。
		this();//調用了本類中空參數的構造函數。
	   System.out.println("有參的構造函數...i="+i+",j="+j);
	}

	{ //構造代碼塊,定義在類中的代碼塊,用於給所有對象進行初始化動作的代碼塊。
	   System.out.println("構造代碼塊...i="+i+",j="+j);
	}

	static void show(){//靜態函數。函數中沒有訪問非靜態的成員。
	    System.out.println("靜態show方法...i="+i);
	}

	Demo(){// 空參數的構造函數。 
	   System.out.println("無參的構造函數..."+",j="+j);
	}
}
class Test
{
	public static void main(String[] args)
	{
		Demo d = new Demo(1);//通過Day06.class類文件創建了對象。
		int a = Demo.i;

		System.out.println("----");

		new Demo();
		show();
	}

	public static void show()
		{}
}

執行過程解析:
1. 執行靜態代碼塊:靜態代碼塊...i=2

 

2. 再執行構造代碼塊:構造代碼塊...i=2,j=9
 
3. Demo(int a) 進棧後,第一行this()調用了本類中空參數的構造函數。所以Demo()進棧

 

4. Demo()第一句默認super(),之後屬性顯示初始化,構造代碼塊初始化,以後執行print:無參的構造函數...,j=9

 

5. Demo()出棧,接着執行Demo(int a):有參的構造函數...i=2,j=9   Demo(int a)出棧 堆內存分配空間釋放,等待垃圾回收

 

6. 執行int a = Demo.i; System.out.println("----");

 

7. new Demo()調用空參構造函數;

 

8. 執行構造代碼塊...i=2,j=9

 

9.無參的構造函數...,j=9

 奮鬥奮鬥奮鬥

 

---------------------- android培訓 、 java培訓 、 期待與您交流! ----------------------
詳細請查看:www.itheima.com
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章