Javaでファイナライズする

王林
リリース: 2024-08-30 16:10:59
オリジナル
440 人が閲覧しました

Finalize は Java のメソッドです。この Finalize() メソッドは main メソッドと似ています。この Finalize() メソッドは、オブジェクトがガベージ コレクションされる直前に呼び出されます。これは、元のオブジェクトがシステム リソースの解放、データベースなどの接続の終了、ファイルを開く接続などのクリーンアップ アクティビティを実行する最後の機会を意味します。finalize メソッドの主な問題は、Java 言語仕様 (JLS) によって呼び出される保証がないことです。ガベージ コレクターによって、またはいつ呼び出されるか。オブジェクトがガベージ コレクションの対象になった後、最長で無期限に待機する可能性がある例を考えてみましょう。これは、finalize() メソッドが呼び出される前を意味します。同様に、保証なしと呼ばれる方法が完了した後、すぐに回収されます。したがって、finalize() メソッド内で重要なアクティビティを実行するのは意味がありません。ある JVM では動作する可能性がありますが、開発時には他の JVM では動作しない可能性があります。finalize() メソッドは java.lang.Object 内で使用できるため、Object がクラスであるため、すべてのクラスでオーバーライドのために自動的に使用できます。 ' 基本クラス。

Java では、finalize() メソッドはどのように機能しますか?

この Finalize() メソッドは、オブジェクトがガベージ コレクションされる前に呼び出されます。つまり、他の Java メソッドと同様に、finalize() メソッドを手動で呼び出すことはできません。 Finalize() メソッドはガベージ コレクター (GC) スレッドによって 1 回だけ呼び出されます。

広告 このカテゴリーの人気コース 財務モデリングと評価 - 専門分野 | 51 コースシリーズ | 30 回の模擬テスト

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

コード:

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 ではないコードをよく観察すると、実際のファイナライズ メソッドの署名が 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

ファイナライズ方法が保証されていない例

コード:
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();
}
}
}
ログイン後にコピー

出力:

Javaでファイナライズする

説明: 上の例は、finalize メソッドが常に実行されるとは限らないことを明確に示しています。

結論

Java の Finalize() メソッドは、ガベージ コレクションされたオブジェクトを収集するために使用されます。このメソッドは、GC() メソッドが呼び出される直前に呼び出されます。このメソッドは常に実行されることが保証されているわけではありません。

以上がJavaでファイナライズするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート