Finalize 是 Java 中的一個方法。這個finalizes()方法和main方法類似。 Finalizes() 方法在物件被垃圾回收之前呼叫。這意味著原始物件執行清理活動的最後機會,例如釋放系統資源、關閉資料庫連線、檔案開啟連線等。 Finalize 方法的主要問題是 Java 語言規格 (JLS) 無法保證該方法將被呼叫由垃圾收集器或何時呼叫。讓我們考慮一個範例,物件在符合垃圾回收條件後可能會無限期等待。這意味著在呼叫其finalize()方法之前。同樣,在完成呼叫它的方法後,不能保證它會立即被收集。因此,在 Finalize() 方法中執行關鍵活動是沒有意義的。它可能在一個 JVM 中工作,並且在開發時在其他 JVM 中可能無法運作。 finalize() 方法在 java.lang.Object 中可用,因此它自動可供所有類別覆蓋,因為 Object 是類別' 基類別。
finalize()方法是在物件被垃圾回收之前呼叫的,所以這意味著我們不能像其他Java方法一樣手動呼叫finalize()方法。 Finalize() 方法僅由垃圾收集器 (GC) 執行緒呼叫一次。
廣告 該類別中的熱門課程 財務建模與估值 - 專業化 | 51 課程系列 | 30 次模擬測驗開始您的免費軟體開發課程
網頁開發、程式語言、軟體測試及其他
代碼:
protected void finalize throws Throwable { //write some code }
finalize()方法有一個空的實現,並且在我們的類別中存在清理活動,那麼我們必須重寫這個finalize()方法來定義我們的清理活動。
以下是一些提到的例子:
最終確定方法使用者覆蓋方法範例
代碼:
Main.java
//creating class public class Main { //main method for run the Java application public static void main(String[] args) { //Creating String object with some content String string = new String("I am Amardeep"); //make the string reference to null for allow it for Garbage Collection string = null; // Calling gc method for Garbage Collection System.gc(); //displaying some message to the user System.out.println("\tI am in Main method"); } //We are Overriding finalize method. public void finalize() { //displaying some message to the user System.out.println("\tI am feeling that I am Overriding finalize method"); } }
輸出:
解釋:如果您觀察上面的輸出,您可能會驚訝於您沒有最終確定重寫方法。如果您仔細觀察程式碼,這不是實際的 Java 給定重寫方法,它就像使用者創建的方法,因為我們知道實際的 Finalize 方法簽章 protected void Finalize()。所以我們沒有在輸出中得到這個。
最終確定方法覆蓋實際方法範例
代碼:
Main.java
//creating class public class Main { //main method for run the Java application public static void main(String[] args) { //Creating Main object Main main = new Main(); //make the main reference to null for allow it for Garbage Collection main = null; // Calling gc method for Garbage Collection System.gc(); //displaying some message to the user System.out.println("\tI am Amardeep from main method"); } //We are Overriding finalize method. @Override protected void finalize() { //displaying some message to the user System.out.println("\tI am actaully Overriding now."); } }
輸出:
解釋:正如我們在上面的輸出中看到的,我們由於覆蓋了實際的 Finalize() 方法而輸出了 Finalize() 方法。
finally 區塊範例中的 Finalize 方法
代碼:
Main.java
//creating class public class Main { //main method for run the Java application public static void main(String[] args) { //Creating Main object Main main = new Main(); //make the main reference to null for allow it for Garbage Collection main = null; // Calling gc method for Garbage Collection System.gc(); //displaying some message to the user System.out.println("\tI am Amardeep from main method"); } //We are Overriding finalize method. @Override protected void finalize() throws Throwable { try{ //displaying some message to the user System.out.println("\tFinalize of Paramesh"); }catch(Throwable t){ throw t; }finally{ //displaying some message to the user System.out.println("\tCalling finalize from finally block"); super.finalize(); } } }
輸出:
Finalize 方法不保證範例
代碼:
FinalizeNotGuarantee.java
//package com.finalize; public class FinalizeNotGuranteed implements Runnable { //user defined method private void getMyMethod() throws InterruptedException { //try block try { System.out.println("Hi, I am TRY"); throw new NullPointerException(); //catch block } catch (NullPointerExceptionnpe) { System.out.println("Hi, Iam CATCH"); //finally block } finally { System.out.println("Hi, I am FINALLY"); } } //overriding finalize method @Override protected void finalize() throws Throwable { System.out.println("I am kinside finalize block"); super.finalize(); } //overriding Thread run method @Override public void run() { try { getMyMethod(); } catch (InterruptedException e) { e.printStackTrace(); } } public static void main(String[] args) { for (int i = 1; i<= 3; i++) { //start the thread method run by using start method new Thread(new FinalizeNotGuranteed()).start(); } } }
輸出:
說明:上面的例子清楚地說明了finalize方法並不總是保證執行。
Java的finalizes()方法用於收集垃圾回收物件。該方法在呼叫 GC() 方法之前呼叫。此方法並不總是保證執行。
以上是在 Java 中完成的詳細內容。更多資訊請關注PHP中文網其他相關文章!