ホームページ >Java >&#&チュートリアル >Javaのデストラクタ
Java のデストラクターは、Java の Finalize メソッドで学習できます。考え方はfinalizeメソッドと同じです。 Java は、ガベージ コレクションの助けを借りてデストラクターを除いてすべて機能します。したがって、デストラクターを呼び出す必要がある場合は、finalize メソッドを使用して実行できます。このメソッドはガベージ コレクションに依存しているため、独立していません。ガベージ コレクターは、ヒープ領域内の未使用のオブジェクトを削除または破棄するスレッドです。オブジェクトがファイルに接続されている場合、またはデータベース アプリケーションやネットワーク接続がある場合、オブジェクトを削除または破棄する前に、ガベージ コレクションが実行される前に、これらのリソースに関連するすべての接続を閉じる必要があります。この関数の終了は、finalize メソッドを呼び出すことによって行われます。
「デストラクターは、オブジェクトの破棄が行われるときに呼び出されるメソッドです。 “ デストラクターの主な目的は、割り当てられたメモリを解放し、開いているファイルのクローズ、データベース接続のクローズ、ネットワーク リソースのクローズなどのリソースをクリーンアップすることです。
広告 このカテゴリーの人気コース JAVA マスタリー - スペシャライゼーション | 78 コース シリーズ | 15 回の模擬テスト構文
class Object { protected void finalize() { //statements like the closure of database connection } }
Java のデストラクターには、C++ のデストラクターに似た Finalize() メソッドがあります。オブジェクトが作成されると、それらはヒープ メモリに保存されます。これらには、メインスレッドまたは子スレッドからアクセスできます。したがって、これらのオブジェクトがメインスレッドまたはその子スレッドによって使用されなくなると、それらはガベージコレクションの対象となり、取得されたメモリは作成される新しいオブジェクトによって使用できるようになります。オブジェクトがガベージ コレクターによってガベージ コレクションされる前に、JRE (Java ランタイム環境) は Finalize() メソッドを呼び出して、入出力ストリーム、データベース接続、ネットワーク接続などを閉じます。呼び出される Finalize メソッドは保護されていることに注意してください。 。 Finalize は基本クラスまたは派生クラスのどちらからも呼び出すことができるのに、なぜ保護されているのでしょうか? Objectクラスにはfinalizeメソッドが存在します。したがって、このファイナライズ メソッドを他のオブジェクトから呼び出したい場合は、これを protected に public に変更できます。
構文:
protected void finalize throws Throwable() { //Keep some resource closing operations here }
finalize() のメソッド
以下のプログラムでは、プログラム内に存在するfinalizeメソッドの代わりに、Stringクラスに対応するfinalizeメソッドが呼び出されます。ここで、finalize メソッドがオーバーライドされます。
コード:
public class Demo { public static void main(String[] args) { Integer i = new Integer(2); i = null; System.gc(); System.out.println("In the Main Method"); } protected void finalize() { System.out.println("object is garbage collected "); } }
出力:
以下のプログラムでは、finalize メソッドが内部的に呼び出されます。明示的な呼び出しは必要ありません。
コード
public class Demo { public static void main(String[] args) { Demo dm = new Demo(); dm = null; System.gc(); System.out.println("In the Main Method"); } protected void finalize() { System.out.println("object is garbage collected "); } }
出力:
以下のプログラムでは、作成されたオブジェクトの数に応じて内部的にファイナライズが呼び出されています。
コード
public class NewProgram{ public void finalize(){ System.out.println("object is garbage collected"); } public static void main(String args[]){ NewProgram np1=new NewProgram(); //first instantiation of Class NewProgram NewProgram np2=new NewProgram(); //second instantiation of Class NewProgram np1=null; np2=null; System.gc(); System.out.println("In the Main Method"); } }
出力:
以下のプログラムでは、2 つのオブジェクトが作成され、両方のオブジェクトが同じものを指しているため、finalize が 1 回呼び出されます。
コード:
public class NewProgram{ public void finalize(){ System.out.println("garbage collected"); } public static void main(String args[]){ NewProgram np1=new NewProgram(); //first instantiation of Class NewProgram NewProgram np2=new NewProgram(); //second instantiation of Class NewProgram np1 = np2; // both now pointing to same object System.gc(); System.out.println("in the Main Method"); } }
O出力:
以下のプログラムでは、finalize メソッドが明示的に 2 回、両方とも内部的に呼び出されます。
コード
public class Demo { public static void main(String[] args) { Demo dm = new Demo(); dm.finalize(); dm = null; System.gc(); System.out.println("In the Main Method"); } protected void finalize() { System.out.println("garbage collected "); } }
出力:
以下のプログラムでは、明示的に呼び出されたファイナライズ メソッドで算術例外が呼び出されます。これによりさらに例外が発生し、残りのプログラムの実行が停止されます。
コード:
public class Demo { public static void main(String[] args) { Demo dm = new Demo(); dm.finalize(); dm = null; System.gc(); System.out.println("In the Main Method"); } protected void finalize() { System.out.println("garbage collected "); System.out.println(10 / 0); } }
出力:
以下のプログラムでは、明示的に呼び出されず、残りのプログラムの実行が継続されるため、呼び出される例外はありません。
Code:
public class Demo { public static void main(String[] args) { Demo dm = new Demo(); dm = null; System.gc(); System.out.println("In the Main Method"); } protected void finalize() { System.out.println("garbage collected "); System.out.println(10 / 0); } }
Output:
I hope this article was interesting and informative both for you to learn the topic. This article given has covered almost all the topics you are looking for, and I hope fulfills all of your requirements.
以上がJavaのデストラクタの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。