Java中提供了finalize方法,在垃圾回收器在進行記憶體釋放時會先呼叫finalize,但會有一些誤解。
1)、物件可能不會被垃圾回收。
2)、垃圾回收不等於"析構",finalize不是析構函式。
3)、垃圾回收只與記憶體有關。
4)、垃圾回收和finalize都是靠不住的,只要JVM還沒到記憶體耗盡的地步,它是不會浪費時間進行記憶體回收的。
finalize的呼叫前提情況:
##1)、所有物件都被Garbage Collection自動調用,例如執行System.gc()的時候2)、程式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中文網其他相關文章!