首頁  >  文章  >  Java  >  Java關鍵字之finalize使用的範例程式碼

Java關鍵字之finalize使用的範例程式碼

黄舟
黄舟原創
2017-03-15 13:24:271751瀏覽

Java中提供了finalize方法,在垃圾回收器在進行記憶體釋放時會先呼叫finalize,但會有一些誤解。

1)、物件可能不會被垃圾回收。

2)、垃圾回收不等於"析構",finalize不是析構函式

3)、垃圾回收只與記憶體有關。

4)、垃圾回收和finalize都是靠不住的,只要JVM還沒到記憶體耗盡的地步,它是不會浪費時間進行記憶體回收的。

finalize的呼叫前提情況:

##1)、所有物件都被Garbage Collection自動調用,例如執行System.gc()的時候

2)、程式

退出時為每個物件呼叫finalize()方法

3)、顯式的呼叫finalize方法

並不建議使用finalize方法完成非記憶體資源的清理工作,但建議用於:(1)清理本地物件(透過JNI創建的物件)。 (2)作為確保

某些非記憶體資源的釋放(socket,文件,連接埠等等)

finalize()方法的通用格式:

protected void finalize()
{
    //finalization code here
}

簡單範例程式碼:

public class FinalizationDemo {
    public static void main(String[] args) {
        Cake c1 = new Cake(1);
        Cake c2 = new Cake(2);
        Cake c3 = new Cake(3);
        c2 = c3 = null;
        System.gc(); //Invoke the Java garbage collector  
    }
}
class Cake extends Object {
    private int id;
    public Cake(int id) {
        this.id = id;
        System.out.println("Cake Object " + id + "is created");
    }
    protected void finalize() throws java.lang.Throwable {
        super.finalize();
        System.out.println("Cake Object " + id + "is disposed");
    }
}

執行結果:

Cake Object 1is created
Cake Object 2is created
Cake Object 3is created
Cake Object 3is disposed
Cake Object 2is disposed


#

以上是Java關鍵字之finalize使用的範例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn