Java中有一個與垃圾回收相關的方法叫做finalize。finalize是一個Object類中的方法,因此被繼承到了所有Java類中。
當一個對象經過一定時間后沒有被引用,Java虛擬機會調用該對象的finalize方法。在該方法中,開發人員可以加入善后處理代碼,例如釋放資源。但由于finalize的調用時機不確定,可能會導致代碼執行順序的混亂,因此finalize方法被認為是不可靠的。
public class TestObject{ private String name; public TestObject(String name){ this.name = name; } @Override protected void finalize() throws Throwable { System.out.println(name + " has been finalized."); } } public class FinalizeTest{ public static void main(String[] args) throws InterruptedException { TestObject obj1 = new TestObject("Obj1"); TestObject obj2 = new TestObject("Obj2"); obj1 = null; obj2 = null; System.gc(); Thread.sleep(1000); // 暫停1秒,以便觀察輸出結果 } }
上面的示例代碼中,TestObject類的finalize方法會在對象被清理時輸出一條信息。在Main方法中,我們創建兩個TestObject對象,然后將其設為null,以確保它們沒有被引用。在運行System.gc()后不久,Java虛擬機會調用未被引用的TestObject對象的finalize方法。這時,我們就可以看到“obj1 has been finalized”和“obj2 has been finalized”兩個信息的輸出。
上一篇vue桌面菜單效果