題組內容
四、物件導向語言 Java 與 C++ 最大的不同是 Java class 沒有解構子(destructor)。
(每小題 10 分,共 20 分)
⑵如果沒有 destructor,請問 Java 如何解決 destructor 原本要解決的問題?
詳解 (共 1 筆)
詳解
雖然 Java 沒有解構子(destructor),但它通過其他機制來解決解構子原本要解決的問題,主要是資源釋放和內存管理。以下是 Java 使用的幾種主要方法:
1. 自動垃圾回收(Garbage Collection)
Java 依賴於自動垃圾回收(Garbage Collection)來管理內存,這是解構子在 C++ 中的一個重要用途。垃圾回收器會自動處理不再被引用的對象,釋放它們佔用的內存,這樣程式設計師不需要顯式地釋放內存。
- 工作原理: 垃圾回收器定期掃描堆內存,標記和回收不再被引用的對象。這避免了內存洩漏和懸掛指針問題。
2. try-with-resources 語句
Java 7 引入了 try-with-resources 語句,用來自動管理資源,如文件、網絡連接和數據庫連接。這些資源在使用後需要正確釋放,以防止資源洩漏。任何實現 AutoCloseable 接口的類都可以在 try-with-resources 語句中使用。
3. 明確釋放資源
對於需要顯式釋放的資源(如數據庫連接、文件句柄等),Java 通常使用 finally 塊來確保資源在使用後正確釋放。
4. finalize 方法
Java 提供了一個 finalize 方法,類似於 C++ 的解構子,但這個方法並不推薦使用。finalize 方法在垃圾回收器回收對象之前被調用,用來執行清理操作。然而,由於其執行時間不確定且可能帶來性能問題,使用 finalize 方法被視為不良實踐。