Java物件finalize()方法


Java提供了一種在物件即將被銷毀時執行資源釋放的方法。在Java中建立物件,但是不能銷毀物件。JVM執行一個稱為垃圾收集器的低優先順序特殊任務來銷毀不再參照的所有物件。

垃圾回收器給我們一個機會,在物件被銷毀之前執行清理程式碼。Object類有一個finalize()方法就是用於在物件被銷毀之前執行清理程式碼,宣告如下:

protected void  finalize() throws   Throwable  {  }

Object類中的finalize()方法不會做任何事情。所以需要覆蓋類中的finalize()方法。類的finalize()方法將在類的物件銷毀之前由垃圾回收器呼叫。

範例

以下程式碼顯示了如何建立一個Finalize類覆蓋物件類的finalize()方法。

class Finalize {
  private int x;
  public Finalize(int x) {
    this.x = x;
  }
  public void finalize() {
    System.out.println("Finalizing " + this.x);
  }
}
public class Main {
  public static void main(String[] args) {
    for (int i = 0; i < 20; i++) {
        Finalize f= new Finalize(i);
        f.finalize();// 可顯示的呼叫
    }
  }
}

上面的程式碼生成以下結果。

Finalizing 0
Finalizing 1
Finalizing 2
Finalizing 3
Finalizing 4
Finalizing 5
Finalizing 6
Finalizing 7
Finalizing 8
Finalizing 9
Finalizing 10
Finalizing 11
Finalizing 12
Finalizing 13
Finalizing 14
Finalizing 15
Finalizing 16
Finalizing 17
Finalizing 18
Finalizing 19