在 Java 中完成
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 給定重寫方法,它就像使用者創建的方法,因為我們知道實際的 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."); } }
輸出:
解釋:正如我們在上面的輸出中看到的,我們由於覆蓋了實際的 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(); } } }
輸出:
範例#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(); } } }
輸出:
說明:上面的例子清楚地說明了finalize方法並不總是保證執行。
結論
Java的finalizes()方法用於收集垃圾回收物件。該方法在呼叫 GC() 方法之前呼叫。此方法並不總是保證執行。
以上是在 Java 中完成的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

AI可以幫助優化Composer的使用,具體方法包括:1.依賴管理優化:AI分析依賴關係,建議最佳版本組合,減少衝突。 2.自動化代碼生成:AI生成符合最佳實踐的composer.json文件。 3.代碼質量提升:AI檢測潛在問題,提供優化建議,提高代碼質量。這些方法通過機器學習和自然語言處理技術實現,幫助開發者提高效率和代碼質量。

MySQL函數可用於數據處理和計算。 1.基本用法包括字符串處理、日期計算和數學運算。 2.高級用法涉及結合多個函數實現複雜操作。 3.性能優化需避免在WHERE子句中使用函數,並使用GROUPBY和臨時表。

在MySQL中配置字符集和排序規則的方法包括:1.設置服務器級別的字符集和排序規則:SETNAMES'utf8';SETCHARACTERSETutf8;SETCOLLATION_CONNECTION='utf8_general_ci';2.創建使用特定字符集和排序規則的數據庫:CREATEDATABASEexample_dbCHARACTERSETutf8COLLATEutf8_general_ci;3.創建表時指定字符集和排序規則:CREATETABLEexample_table(idINT

MySQL中重命名數據庫需要通過間接方法實現。步驟如下:1.創建新數據庫;2.使用mysqldump導出舊數據庫;3.將數據導入新數據庫;4.刪除舊數據庫。

在C 中實現單例模式可以通過靜態成員變量和靜態成員函數來確保類只有一個實例。具體步驟包括:1.使用私有構造函數和刪除拷貝構造函數及賦值操作符,防止外部直接實例化。 2.通過靜態方法getInstance提供全局訪問點,確保只創建一個實例。 3.為了線程安全,可以使用雙重檢查鎖定模式。 4.使用智能指針如std::shared_ptr來避免內存洩漏。 5.對於高性能需求,可以使用靜態局部變量實現。需要注意的是,單例模式可能導致全局狀態的濫用,建議謹慎使用並考慮替代方案。

JavaplaysigantroleiniotduetoitsplatFormentence.1)itallowscodeTobewrittenOnCeandrunonVariousDevices.2)Java'secosystemprovidesuseusefidesusefidesulylibrariesforiot.3)

Java適合開發跨服務器web應用。 1)Java的“一次編寫,到處運行”哲學使其代碼可在任何支持JVM的平台上運行。 2)Java擁有豐富的生態系統,包括Spring和Hibernate等工具,簡化開發過程。 3)Java在性能和安全性方面表現出色,提供高效的內存管理和強大的安全保障。

如何在HTML中設置元素的旋轉效果?使用CSS和JavaScript可以實現。 1.CSS的transform屬性用於靜態旋轉,如rotate(45deg)。 2.JavaScript可動態控制旋轉,通過改變transform屬性實現。
