當(dāng)對(duì)象失效了,它就會(huì)從內(nèi)存中移出,或者說是刪除。和對(duì)象創(chuàng)建時(shí)調(diào)用構(gòu)造函數(shù)類似,Java在對(duì)象刪除時(shí)提供了調(diào)用析構(gòu)函數(shù)的能力。構(gòu)造函數(shù)的名稱使用類的名稱,與此不同的是,析構(gòu)函數(shù)的名稱是 finalize()。 finalize()方法提供一個(gè)放置執(zhí)行清除對(duì)象的代碼的位置,如下定義: void finalize() { // 收尾工作 } 有必要指出的是,在 Java 中當(dāng)對(duì)象失效時(shí),不能保證 finalize()方法會(huì)被調(diào)用。這是因?yàn)?Java在系統(tǒng)垃圾收集(garbage collectio
當(dāng)對(duì)象失效了,它就會(huì)從內(nèi)存中移出,或者說是刪除。和對(duì)象創(chuàng)建時(shí)調(diào)用構(gòu)造函數(shù)類似,Java在對(duì)象刪除時(shí)提供了調(diào)用析構(gòu)函數(shù)的能力。構(gòu)造函數(shù)的名稱使用類的名稱,與此不同的是,析構(gòu)函數(shù)的名稱是 finalize()。 finalize()方法提供一個(gè)放置執(zhí)行清除對(duì)象的代碼的位置,如下定義:
void finalize() {
// 收尾工作
}
有必要指出的是,在 Java 中當(dāng)對(duì)象失效時(shí),不能保證 finalize()方法會(huì)被調(diào)用。這是因?yàn)?Java在系統(tǒng)垃圾收集(garbage collection)部分刪除掉了對(duì)象,這會(huì)在不定的時(shí)間間隔里發(fā)生。由于在Java 執(zhí)行一次垃圾收集前,對(duì)象并不會(huì)被真正地刪除掉,所以對(duì)象的 finalize()方法在此之前也不會(huì)被調(diào)用。知道這一點(diǎn),就可以肯定地說不應(yīng)該依靠 finalize()方法來完成任何和時(shí)間關(guān)鍵(time
critical)相關(guān)的事情。通常你很少需要在 finalize()方法中放置代碼,因?yàn)?Java 在系統(tǒng)運(yùn)行期間對(duì) 失效對(duì)象做了很好的清理工作。
點(diǎn)擊加載更多評(píng)論>>