對象實例化的過程

一個對象實例化的過程(假設對象是Person):

Person p = new Person();

  1. jvm會讀取指定路徑下的Person.class文件,並加載進內存,並會先加載Person的父類(如果有直接父類的情況下)
  2. 在堆內存中開闢空間,分配地址。
  3. 並在對象空間中,對對象中的屬性進行默認初始化。
  4. 調用對應的構造函數進行初始化。
  5. 在構造函數中,第一行會先調用父類中的構造函數進行初始化。
  6. 父類初始化完畢後,再對子類的屬性進行顯示初始化。
  7. 再進行子類構造函數的特定初始化。
  8. 初始化完畢後,將地址值賦給引用變量。

案例

class Fu
{
	Fu()
	{
		super();
		show();
		return;
	}
	void show()
	{
		System.out.println("fu show");
	}
}

class Zi extends Fu
{
	int num = 8;
	Zi()
	{
		super();
		//-->通過super初始化父類內容時,子類的成員變量並未顯式初始化。等super()父類初始化完畢後,才進行子類成員變量顯式初始化。
		System.out.println("zi cons run..." + num);
		return;
	}
	void show()
	{
		System.out.println("zi show..." + num);
	}
}

class ExtendsDemo5
{
	public static void main(String[] args)
	{
		Zi z = new Zi();//輸出答案爲zi show...0 + zi cons run...8

		z.show();//輸出答案爲zi show...8

		/*
		zi show...0//父類構造函數初始化,子類show方法覆蓋父類show方法,調用子類的show方法,此時成員變量並未初始化
		zi cons run...8
		zi show...8
		*/
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章