析構(gòu)方法與構(gòu)造方法相反,當(dāng)對象脫離其作用域時(例如對象所在的方法已調(diào)用完畢),系統(tǒng)自動執(zhí)行析構(gòu)方法。析構(gòu)方法往往用來做清理垃圾碎片的工作,例如在建立對象時用 new 開辟了一片內(nèi)存空間,應(yīng)退出前在析構(gòu)方法中將其釋放。
在 Java 的 Object 類中還提供了一個 protected 類型的 finalize() 方法,因此任何 Java 類都可以覆蓋這個方法,在這個方法中進(jìn)行釋放對象所占有的相關(guān)資源的操作。
對象的 finalize() 方法具有如下特點:
垃圾回收器是否會執(zhí)行該方法以及何時執(zhí)行該方法,都是不確定的。
finalize() 方法有可能使用對象復(fù)活,使對象恢復(fù)到可觸及狀態(tài)。
垃圾回收器在執(zhí)行 finalize() 方法時,如果出現(xiàn)異常,垃圾回收器不會報告異常,程序繼續(xù)正常運行。
例如:
protected void finalize() { // 對象的清理工作}
填寫下面表單即可預(yù)約申請免費試聽java課程!害怕學(xué)不會?助教全程陪讀,隨時解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可全國推薦就業(yè)!
例 1
下面通過一個例子來講解析構(gòu)方法的使用。該例子計算從類中實例化對象的個數(shù)。
1)Counter 類在構(gòu)造方法中增值,在析構(gòu)方法中減值。如下所示為計數(shù)器類 Counter 的代碼:
public class Counter { private static int count = 0; // 計數(shù)器變量 public Counter() { // 構(gòu)造方法 this.count++; // 創(chuàng)建實例時增加值 } public int getCount() { // 獲取計數(shù)器的值 return this.count; } protected void finalize() { // 析構(gòu)方法 this.count--; // 實例銷毀時減少值 System.out.println("對象銷毀"); }}
2)創(chuàng)建一個帶 main() 的 TestCounter 類對計數(shù)器進(jìn)行測試,示例代碼如下:
public class TestCounter { public static void main(String[] args) { Counter cnt1 = new Counter(); // 建立第一個實例 System.out.println("數(shù)量:"+cnt1.getCount()); // 輸出1 Counter cnt2 = new Counter(); // 建立第二個實例 System.out.println("數(shù)量:"+cnt2.getCount()); // 輸出2 cnt2 = null; // 銷毀實例2 try { System.gc(); // 清理內(nèi)存 Thread.currentThread().sleep(1000); // 延時1000毫秒 System.out.println("數(shù)量:"+cnt1.getCount()); // 輸出1 } catch(InterruptedException e) { e.printStackTrace(); } }}
執(zhí)行后輸出結(jié)果如下:
數(shù)量:1
數(shù)量:2
對象銷毀
數(shù)量:1
技巧:由于 finalize() 方法的不確定性,所以在程序中可以調(diào)用 System.gc() 或者 Runtime.gc() 方法提示垃圾回收器盡快執(zhí)行垃圾回收操作。
下一篇: 沒有了
初級會計職稱中級會計職稱經(jīng)濟(jì)師注冊會計師證券從業(yè)銀行從業(yè)會計實操統(tǒng)計師審計師高級會計師基金從業(yè)資格稅務(wù)師資產(chǎn)評估師國際內(nèi)審師ACCA/CAT價格鑒證師統(tǒng)計資格從業(yè)
一級建造師二級建造師消防工程師造價工程師土建職稱房地產(chǎn)經(jīng)紀(jì)人公路檢測工程師建筑八大員注冊建筑師二級造價師監(jiān)理工程師咨詢工程師房地產(chǎn)估價師 城鄉(xiāng)規(guī)劃師結(jié)構(gòu)工程師巖土工程師安全工程師設(shè)備監(jiān)理師環(huán)境影響評價土地登記代理公路造價師公路監(jiān)理師化工工程師暖通工程師給排水工程師計量工程師
人力資源考試教師資格考試出版專業(yè)資格健康管理師導(dǎo)游考試社會工作者司法考試職稱計算機營養(yǎng)師心理咨詢師育嬰師事業(yè)單位教師招聘公務(wù)員公選考試招警考試選調(diào)生村官
執(zhí)業(yè)藥師執(zhí)業(yè)醫(yī)師衛(wèi)生資格考試衛(wèi)生高級職稱護(hù)士資格證初級護(hù)師主管護(hù)師住院醫(yī)師臨床執(zhí)業(yè)醫(yī)師臨床助理醫(yī)師中醫(yī)執(zhí)業(yè)醫(yī)師中醫(yī)助理醫(yī)師中西醫(yī)醫(yī)師中西醫(yī)助理口腔執(zhí)業(yè)醫(yī)師口腔助理醫(yī)師公共衛(wèi)生醫(yī)師公衛(wèi)助理醫(yī)師實踐技能內(nèi)科主治醫(yī)師外科主治醫(yī)師中醫(yī)內(nèi)科主治兒科主治醫(yī)師婦產(chǎn)科醫(yī)師西藥士/師中藥士/師臨床檢驗技師臨床醫(yī)學(xué)理論中醫(yī)理論