日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

finalize方法的使用

發(fā)布時(shí)間:2024/5/24 综合教程 39 生活家
生活随笔 收集整理的這篇文章主要介紹了 finalize方法的使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

finalize()是在java.lang.Object里定義的,也就是說(shuō)每一個(gè)對(duì)象都有這么個(gè)方法。這個(gè)方法在gc啟動(dòng),該對(duì)象被回收的時(shí)候被調(diào)用。其實(shí)gc可以回收大部分的對(duì)象(凡是new出來(lái)的對(duì)象,gc都能搞定,一般情況下我們又不會(huì)用new以外的方式去創(chuàng)建對(duì)象),所以一般是不需要程序員去實(shí)現(xiàn)finalize的。
特殊情況下,需要程序員實(shí)現(xiàn)finalize,當(dāng)對(duì)象被回收的時(shí)候釋放一些資源,比如:一個(gè)socket鏈接,在對(duì)象初始化時(shí)創(chuàng)建,整個(gè)生命周期內(nèi)有效,那么就需要實(shí)現(xiàn)finalize,關(guān)閉這個(gè)鏈接。
使用finalize還需要注意一個(gè)事,調(diào)用super.finalize();

一個(gè)對(duì)象的finalize()方法只會(huì)被調(diào)用一次,而且finalize()被調(diào)用不意味著gc會(huì)立即回收該對(duì)象,所以有可能調(diào)用finalize()后,該對(duì)象又不需要被回收了,然后到了真正要被回收的時(shí)候,因?yàn)榍懊嬲{(diào)用過(guò)一次,所以不會(huì)調(diào)用finalize(),產(chǎn)生問(wèn)題。
所以,推薦不要使用finalize()方法,它跟析構(gòu)函數(shù)不一樣。

1.object定義
protected void finalize()//定義為子類可見

2.執(zhí)行時(shí)機(jī)不可預(yù)知
當(dāng)一個(gè)對(duì)象變得不可觸及時(shí),垃圾回收器某個(gè)時(shí)期會(huì)回收此對(duì)象。
當(dāng)回收對(duì)象之前會(huì)調(diào)用finalize方法,這類似于人類臨終之前必須做一件事情:寫遺言。
因?yàn)镚C是不確定性的(這跟JVM相關(guān)),所以finalize方法的執(zhí)行具有不可預(yù)知性。

3.finalize忽略異常
即finalize代碼中若出現(xiàn)異常,異常會(huì)被忽略

4.finalize使用
什么時(shí)候使用?一般來(lái)說(shuō),finalize被作為第二種安全網(wǎng)來(lái)使用,如FileInputStream類,
當(dāng)對(duì)象回收時(shí),有可能資源為釋放,所以這里第二次來(lái)確認(rèn)(那也總比不釋放強(qiáng)吧,雖然具體釋放時(shí)機(jī)未定)

protected void finalize() throws IOException { 
    if (fd != null) { 
        if (fd != fd.in) { 
            close(); 
        } 
    } 
} 

注意:某些用到finalize的地方,你必須像如下所示,顯式調(diào)用回收鏈。

protected void finalize() throws IOException { 
    try{ 
                              ... 
    }finally{ 
            super.finalize(); 
    } 
} 

5.<effective java>建議:盡量不要使用finalize,除非以它作為安全網(wǎng),或是為了終結(jié)非關(guān)鍵的原生資源。

總結(jié)起來(lái)finalize()方法可以這樣記憶:

  Object類定義;執(zhí)行不可預(yù)知,忽略異常,一般做第二安全網(wǎng)

參考地址:http://caizi0413.iteye.com/blog/845727
https://segmentfault.com/q/1010000000094660

總結(jié)

以上是生活随笔為你收集整理的finalize方法的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。