首頁  >  文章  >  Java  >  在 Java 中完成

在 Java 中完成

王林
王林原創
2024-08-30 16:10:59387瀏覽

Finalize 是 Java 中的一個方法。這個finalizes()方法和main方法類似。 Finalizes() 方法在物件被垃圾回收之前呼叫。這意味著原始物件執行清理活動的最後機會,例如釋放系統資源、關閉資料庫連線、檔案開啟連線等。 Finalize 方法的主要問題是 Java 語言規格 (JLS) 無法保證該方法將被呼叫由垃圾收集器或何時呼叫。讓我們考慮一個範例,物件在符合垃圾回收條件後可能會無限期等待。這意味著在呼叫其finalize()方法之前。同樣,在完成呼叫它的方法後,不能保證它會立即被收集。因此,在 Finalize() 方法中執行關鍵活動是沒有意義的。它可能在一個 JVM 中工作,並且在開發時在其他 JVM 中可能無法運作。 finalize() 方法在 java.lang.Object 中可用,因此它自動可供所有類別覆蓋,因為 Object 是類別' 基類別。

Java中的finalize()方法是如何運作的?

finalize()方法是在物件被垃圾回收之前呼叫的,所以這意味著我們不能像其他Java方法一樣手動呼叫finalize()方法。 Finalize() 方法僅由垃圾收集器 (GC) 執行緒呼叫一次。

廣告 該類別中的熱門課程 財務建模與估值 - 專業化 | 51 課程系列 | 30 次模擬測驗

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

代碼:

protected void finalize throws Throwable
{
//write some code
}

finalize()方法有一個空的實現,並且在我們的類別中存在清理活動,那麼我們必須重寫這個finalize()方法來定義我們的清理活動。

在 Java 中實作 Finalize 的範例

以下是一些提到的例子:

範例#1

最終確定方法使用者覆蓋方法範例

代碼:
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 中完成

解釋:如果您觀察上面的輸出,您可能會驚訝於您沒有最終確定重寫方法。如果您仔細觀察程式碼,這不是實際的 Java 給定重寫方法,它就像使用者創建的方法,因為我們知道實際的 Finalize 方法簽章 protected void Finalize()。所以我們沒有在輸出中得到這個。

範例#2

最終確定方法覆蓋實際方法範例

代碼:
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.");
}
}

輸出:

在 Java 中完成

解釋:正如我們在上面的輸出中看到的,我們由於覆蓋了實際的 Finalize() 方法而輸出了 Finalize() 方法。

範例#3

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();
}
}
}

輸出:

在 Java 中完成

範例#4

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();
}
}
}

輸出:

在 Java 中完成

說明:上面的例子清楚地說明了finalize方法並不總是保證執行。

結論

Java的finalizes()方法用於收集垃圾回收物件。該方法在呼叫 GC() 方法之前呼叫。此方法並不總是保證執行。

以上是在 Java 中完成的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:Java Base64 解碼下一篇:Java Base64 解碼