Java 中的解構函式
Hiten Kanwar
2021年10月2日
解構函式與建構函式相反。一方面,建構函式用於初始化物件,解構函式用於銷燬(刪除)物件,從而釋放物件佔用的資源。
本教程將討論 Java 中的解構函式、它們的工作方式和方法。
Java 沒有解構函式,也沒有直接的等價物。然而,它是一種強大的語言,其中一個原因是垃圾收集器。Java 為我們提供了一個垃圾收集器,其工作方式類似於解構函式。垃圾收集器,一個執行在 Java 虛擬機器(JVM)上的程式(執行緒),通過刪除未使用的物件來自動釋放記憶體。
在 Java 中,記憶體的分配和釋放由這個垃圾收集器有效地處理。當一個物件的生命週期完成時,垃圾收集器出現,刪除該物件,並釋放或釋放該物件佔用的記憶體。這種方法也稱為非確定性的終結器。但問題是此方法(終結器)的呼叫無法保證,因為它是隱式呼叫的。
Java 中解構函式和 Finalize() 方法的工作
在 Java 中建立物件時,它會佔用堆中的記憶體。執行緒進一步使用這些物件,如果一個執行緒不使用該物件,它們將有資格被垃圾收集器進行垃圾收集。因此,這些物件佔用的記憶體現在變為空置,可以被任何新實體進一步利用。當垃圾收集器銷燬任何物件時,Java 執行時環境 (JRE) 會呼叫 finalize()
方法來關閉連線,例如網路和資料庫連線。
我們不能強制垃圾收集器執行和銷燬物件。但是 Java 在這裡提供了另一種方法。java 物件為我們提供了 finalize()
方法,其工作方式類似於解構函式。但是,它只能呼叫一次。
需要理解的一點是 finalize()
方法不是解構函式,而是提供額外的安全性並進一步確保外部資源,例如在關閉操作(程式)之前關閉檔案,並且與解構函式的工作方式非常相似。
請參考下面的程式碼。
public class Dest_java {
public static void main(String[] args) {
Dest_java des = new Dest_java();
des.finalize();
des = null;
System.gc();
System.out.print("main() method ");
}
protected void finalize() {
System.out.print("Destroyed ");
}
}
輸出:
Destroyed main() method Destroyed