Finalize は Java のメソッドです。この Finalize() メソッドは main メソッドと似ています。この Finalize() メソッドは、オブジェクトがガベージ コレクションされる直前に呼び出されます。これは、元のオブジェクトがシステム リソースの解放、データベースなどの接続の終了、ファイルを開く接続などのクリーンアップ アクティビティを実行する最後の機会を意味します。finalize メソッドの主な問題は、Java 言語仕様 (JLS) によって呼び出される保証がないことです。ガベージ コレクターによって、またはいつ呼び出されるか。オブジェクトがガベージ コレクションの対象になった後、最長で無期限に待機する可能性がある例を考えてみましょう。これは、finalize() メソッドが呼び出される前を意味します。同様に、保証なしと呼ばれる方法が完了した後、すぐに回収されます。したがって、finalize() メソッド内で重要なアクティビティを実行するのは意味がありません。ある JVM では動作する可能性がありますが、開発時には他の JVM では動作しない可能性があります。finalize() メソッドは java.lang.Object 内で使用できるため、Object がクラスであるため、すべてのクラスでオーバーライドのために自動的に使用できます。 ' 基本クラス。
この Finalize() メソッドは、オブジェクトがガベージ コレクションされる前に呼び出されます。つまり、他の Java メソッドと同様に、finalize() メソッドを手動で呼び出すことはできません。 Finalize() メソッドはガベージ コレクター (GC) スレッドによって 1 回だけ呼び出されます。
広告 このカテゴリーの人気コース 財務モデリングと評価 - 専門分野 | 51 コースシリーズ | 30 回の模擬テスト無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
コード:
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 ではないコードをよく観察すると、実際のファイナライズ メソッドの署名が 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(); } } }
出力:
ファイナライズ方法が保証されていない例
コード:
FinalizeNotWarranty.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 の Finalize() メソッドは、ガベージ コレクションされたオブジェクトを収集するために使用されます。このメソッドは、GC() メソッドが呼び出される直前に呼び出されます。このメソッドは常に実行されることが保証されているわけではありません。
以上がJavaでファイナライズするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。