Java 中使用new
創建一個對象的方法是廣為人知的,但是您是否知道在 Java 中和new
相反的操作是什么呢?這個操作是用于銷毀對象的,它被稱為finalize()
。
每個 Java 對象都有一個finalize()
方法,該方法可以在對象被垃圾回收之前被調用。它可以用來執行一些清理操作,例如關閉文件或釋放其他資源。
下面是一個示例:
class MyClass { File file; public MyClass(String filename) { file = new File(filename); } protected void finalize() { try { file.close(); } catch (IOException e) { // handle exception } } } MyClass obj = new MyClass("example.txt"); // 在這里可執行一些操作,然后讓 obj 對象成為垃圾 obj = null; // 這會將 obj 對象設置為 null,使其可以被垃圾收集
在這個例子中,MyClass
包含一個文件對象file
,它的finalize()
方法用于關閉文件。當MyClass
對象變為垃圾時,它的finalize()
方法會自動調用。
需要注意的是,finalize()
方法是由垃圾收集器線程異步調用的,因此不應該在其中執行任何耗時的操作。
在 Java 9 中,finalize()
已被棄用。取而代之的是使用Cleaner
類來提供類似的功能。例如:
class MyClass implements AutoCloseable { private Cleaner cleaner = Cleaner.create(); private File file; public MyClass(String filename) { file = new File(filename); cleaner.register(this, file::close); } public void close() throws IOException { file.close(); } } MyClass obj = new MyClass("example.txt"); // 在這里可執行一些操作,然后關閉 obj obj.close(); // 這會調用 close() 方法,關閉文件并重新注冊 cleaner
在這個例子中,MyClass
實現了AutoCloseable
接口,并用Cleaner
類注冊了一個清理操作。當MyClass
對象被關閉時,調用close()
方法會關閉文件并重新注冊清理操作,以便再次使用該對象。
下一篇css外部調用的代碼