finalize()的調(diào)用方式
finalize()函數(shù)有兩種執(zhí)行方式:1.主動調(diào)用赌髓。2.被動調(diào)用
工作方式:
在對象被JVM判定為垃圾的時候睦优,由垃圾回收器調(diào)用finalize方法中的函數(shù),當然一個對象的finalize函數(shù)只會被JVM調(diào)用一次杠娱。
注意點:
主動調(diào)用就是在程序中顯式調(diào)用邀泉。這樣的調(diào)用次數(shù)不會計入被動調(diào)用的次數(shù)中唯灵,因此當某個對象的finalize被程序員調(diào)用過一次之后,被JVM判定為垃圾時候仍然會執(zhí)行finalize方法而不是立即進行回收薯定。
用途:
(1)終止條件的驗證始绍。
(2)充當保證釋放資源的最后一道防線,比如連接的釋放等话侄。
初始化
主要分成兩塊:static對象初始化以及非static對象初始化
一般對象初始化(非static對象)
按照class中的順序進行初始化賦值亏推,如果是基本數(shù)據(jù)類型則將其賦值為基本數(shù)據(jù)類型的初始值,如果是引用則賦值為null年堆,然后進行構(gòu)造函數(shù)的賦值吞杭。
static對象初始化
與非static對象初始化過程類似,但是需要考慮的就是多了static量变丧,所以JVM會首先收集static對象與變量并先將它們進行賦值芽狗,隨后的過程如同非static對象初始化過程一致。
需要指出的是:靜態(tài)初始化只在需要的時候進行痒蓬,否則不會觸發(fā)初始化童擎。
對比這兩者的初始化過程,其實大致上都類似攻晒,只是static對象首先要將static對象與變量首先處理掉顾复。這一部分的內(nèi)容其實可以參考虛擬機部分的類加載的過程。