Java對象實例化的過程


1.先為對象分配空間,並按屬性類型默認初始化
ps:八種基本數據類型,按照默認方式初始化,其他數據類型默認為null
2.父類屬性的初始化(包括代碼塊,和屬性按照代碼順序進行初始化)
3.父類構造函數初始化
4.子類屬性的初始化(同父類一樣)
5.子類構造函數的初始化

class A{
int a = 8;

{
	//初始化塊 無名語句塊
	//System.out.println("1");
	printA();
}
int b = 9;
public A()
{
	//System.out.println("2");
	printA();
}
public void printA()
{
	System.out.println(a);
}

}

class B extends A{
int a = 6;
{
printA();
}
public B(){
printA();
}
public void printA(){
System.out.println(this.a);
}

@Override
protected void finalize() throws Throwable {
	System.out.println("被收了");
	super.finalize();
}

}
調用new B()輸出結果:0066

首先為對象分配存儲空間
a(A)->並默認賦值為0
a(B)->並默認賦值為0
1.根據對象實例化過程,初始化父類屬性,int a = 8,將a(A)中的值修改為8
2.執行A中代碼塊中的代碼,由於子類復寫了printA()方法,調用子類的printA(),B類中的a仍為0,所以打印0
3.調用父類的構造函數,執行printA()方法,同上,執行子類中的printA()方法,打印0
4.初始化子類的屬性,將a(B)中的值修改為6,執行代碼塊中printA()方法,打印6
5.初始化子類的構造函數,執行子類的printA()方法,打印6
6.輸出結果為:0066

補充:當一個對象沒有被任何變量引用的時候,或者將一個對象置為null的時候,系統的垃圾回收機制會在下一次垃圾回收的時候銷毀該對象,調用對象的finalize()方法
主動調用System.gc()方法也會主動觸發垃圾回收機制銷毀對象


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM