Java中的析構函數可以透過Java中的finalize方法來學習。概念與finalize方法相同。 Java 在垃圾收集的幫助下適用於除析構函數以外的所有函數。因此,如果需要呼叫析構函數,可以藉助finalize方法來完成。此方法不是獨立的,因為它依賴垃圾收集。垃圾收集器是刪除或銷毀堆區域中未使用的物件的執行緒。假設物件連接到檔案或某些資料庫應用程式或網路連接,在刪除或銷毀物件之前,它必須在垃圾收集發生之前關閉與這些資源相關的所有連接。函數的關閉是透過呼叫 Finalize 方法來完成的。
“ 析構函數是在物件銷毀時呼叫的方法。「 析構函數的主要目標是釋放分配的記憶體並清理資源,例如關閉開啟的檔案、關閉資料庫連線、關閉網路資源等,
廣告 該類別中的熱門課程 JAVA 掌握 - 專業化 | 78 課程系列 | 15 次模擬測驗文法
class Object { protected void finalize() { //statements like the closure of database connection } }
析構函式在java中有一個finalize()方法,與C++中的析構函式類似。當物件被創建時,它們被儲存在堆記憶體中。這些可由主執行緒或子執行緒存取。因此,當主執行緒或其子執行緒不再使用這些物件時,它們就有資格進行垃圾回收,並且現在獲取的記憶體可供創建的新物件使用。在物件被垃圾收集器收集之前,JRE(Java Runtime Environment)會呼叫finalize()方法來關閉輸入輸出流、資料庫連線、網路連線等。請注意,呼叫的finalize方法是受保護的。為什麼 Finalize 是受保護的,因為它既可以被基底類別調用,也可以被衍生類別調用? Finalize 方法存在於 Object 類別中。因此,如果您想從其他物件呼叫此 Finalize 方法,您可以將其變更為 public。
文法:
protected void finalize throws Throwable() { //Keep some resource closing operations here }
finalize() 方法
在下面的程式中,呼叫了 String 類別對應的 Finalizes 方法,而不是程式中存在的 Finalize 方法。這裡重寫了finalize方法。
代碼:
public class Demo { public static void main(String[] args) { Integer i = new Integer(2); i = null; System.gc(); System.out.println("In the Main Method"); } protected void finalize() { System.out.println("object is garbage collected "); } }
輸出:
在下面的程式中,內部呼叫了finalize方法;無需明確呼叫。
代碼
public class Demo { public static void main(String[] args) { Demo dm = new Demo(); dm = null; System.gc(); System.out.println("In the Main Method"); } protected void finalize() { System.out.println("object is garbage collected "); } }
輸出:
在下面的程式中,根據建立的物件數量在內部呼叫finalize。
代碼
public class NewProgram{ public void finalize(){ System.out.println("object is garbage collected"); } public static void main(String args[]){ NewProgram np1=new NewProgram(); //first instantiation of Class NewProgram NewProgram np2=new NewProgram(); //second instantiation of Class NewProgram np1=null; np2=null; System.gc(); System.out.println("In the Main Method"); } }
輸出:
在下面的程式中,建立了兩個對象,並且呼叫了一次 Finalize,因為這兩個物件都指向同一個物件。
代碼:
public class NewProgram{ public void finalize(){ System.out.println("garbage collected"); } public static void main(String args[]){ NewProgram np1=new NewProgram(); //first instantiation of Class NewProgram NewProgram np2=new NewProgram(); //second instantiation of Class NewProgram np1 = np2; // both now pointing to same object System.gc(); System.out.println("in the Main Method"); } }
O輸出:
在下面的程式中,finalize 方法將會被明確和內部呼叫兩次。
代碼
public class Demo { public static void main(String[] args) { Demo dm = new Demo(); dm.finalize(); dm = null; System.gc(); System.out.println("In the Main Method"); } protected void finalize() { System.out.println("garbage collected "); } }
輸出:
在下面的程式中,在明確呼叫 Finalize 方法時呼叫了算術異常,這進一步導致了異常並停止了剩餘程式的執行。
代碼:
public class Demo { public static void main(String[] args) { Demo dm = new Demo(); dm.finalize(); dm = null; System.gc(); System.out.println("In the Main Method"); } protected void finalize() { System.out.println("garbage collected "); System.out.println(10 / 0); } }
輸出:
下面的程式中沒有呼叫異常,因為它沒有明確呼叫並繼續執行其餘程式。
Code:
public class Demo { public static void main(String[] args) { Demo dm = new Demo(); dm = null; System.gc(); System.out.println("In the Main Method"); } protected void finalize() { System.out.println("garbage collected "); System.out.println(10 / 0); } }
Output:
I hope this article was interesting and informative both for you to learn the topic. This article given has covered almost all the topics you are looking for, and I hope fulfills all of your requirements.
以上是Java 中的析構函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!