Einführung in Destructor in Java

Destruktoren in Java können mit der finalize-Methode in Java erlernt werden. Das Konzept entspricht der Finalisierungsmethode. Java funktioniert mit Ausnahme des Destruktors mit Hilfe der Garbage Collection für alle. Falls der Destruktor aufgerufen werden muss, kann dies mit Hilfe der finalize-Methode erfolgen. Diese Methode ist nicht unabhängig, da sie auf Garbage Collection basiert. Der Garbage Collector ist ein Thread, der das nicht verwendete Objekt im Heap-Bereich löscht oder zerstört. Sagen wir, wenn das Objekt mit einer Datei verbunden ist oder eine Datenbankanwendung oder Netzwerkverbindung besteht, muss es vor dem Löschen oder Zerstören des Objekts alle Verbindungen zu diesen Ressourcen schließen, bevor die Garbage Collection stattfindet. Das Schließen der Funktionen erfolgt durch Aufrufen der finalize-Methode.

Definition von Destruktor in Java

„Destruktor ist eine Methode, die aufgerufen wird, wenn ein Objekt zerstört wird. „Das Hauptziel des Destruktors besteht darin, den zugewiesenen Speicher freizugeben und Ressourcen wie das Schließen offener Dateien, das Schließen von Datenbankverbindungen, das Schließen von Netzwerkressourcen usw. zu bereinigen.

Syntax

Class Object
(
protected void finalize()
(
//statements like closure of database connection
)
)

Wie funktioniert Destructor in Java?

Der Destruktor verfügt in Java über eine finalize () -Methode, die dem Destruktor in C ++ ähnelt. Wenn die Objekte erstellt werden, werden sie im Heap-Speicher gespeichert. Diese sind über Haupt- oder untergeordnete Threads zugänglich. Wenn diese Objekte also nicht mehr vom Haupt-Thread oder seinen untergeordneten Threads verwendet werden, sind sie für die Garbage Collection berechtigt, und der Speicher, der erworben wurde, wird jetzt verfügbar, wenn neue Objekte erstellt werden. Bevor ein Objekt ein vom Garbage Collector gesammelter Garbage ist, ruft JRE (Java Runtime Environment) die Methode finalize () auf, um die Eingabe-Ausgabe-Streams, die Datenbankverbindungen, die Netzwerkverbindungen usw. zu schließen. Beachten Sie, dass die aufgerufene Methode finalize geschützt ist. Warum ist finalize geschützt, weil es entweder von der Basisklasse oder von einer abgeleiteten Klasse aufgerufen werden kann? Die finalize-Methode ist in der Object-Klasse vorhanden. Wenn Sie diese Finalize-Methode von anderen Objekten aus aufrufen möchten, können Sie sie in public ändern.

Syntax:

protected void finalize throws Throwable()
(
//Keep some resource closing operations here
)

Methoden von finalize ()

  1. Die Methode finalize () ist gemäß der Definition in der Klasse java.lang.Object geschützt.
  2. Die Methode finalize () wird nur einmal aufgerufen.
  3. Um die Methode finalize () zu überschreiben, müssen Sie die Methode finalize explizit aufrufen.
  4. GC () ist ein Dienst von JVM zur Ausführung von Garbage Collection. Er wird aufgerufen, wenn der Heap-Speicher voll ist und Speicher für neu eintreffende Objekte benötigt.
  5. JVM ignoriert alle Ausnahmen mit Ausnahme der nicht aktivierten Ausnahmen, die in der finalize-Methode auftreten.

Beispiel 1

Im folgenden Programm wird anstelle der im Programm vorhandenen finalize-Methode die der String-Klasse entsprechende finalizes-Methode aufgerufen. Die Finalize-Methode wird hier überschrieben.

Code:

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 ");
)
)

Ausgabe:

Beispiel # 2

Im folgenden Programm wird die finalize-Methode intern aufgerufen, ein expliziter Aufruf ist nicht erforderlich.

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("object is garbage collected ");
)
)

Ausgabe:

Beispiel # 3

Im folgenden Programm wurde das Finalisieren abhängig von der Anzahl der erstellten Objekte intern aufgerufen.

Code

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");
)
)

Ausgabe:

Beispiel # 4

Im folgenden Programm werden zwei Objekte erstellt. Das Finalisieren wird einmal aufgerufen, da beide Objekte auf dasselbe verweisen.

Code:

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");
)
)

Ausgabe:

Beispiel # 5

Im folgenden Programm wird die finalize-Methode zweimal explizit und intern aufgerufen.

Code

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 ");
)
)

Ausgabe:

Beispiel # 6

In dem folgenden Programm gibt es eine arithmetische Ausnahme, die in der finalize-Methode aufgerufen wird, da sie explizit aufgerufen wird, wodurch die Ausnahme weiter verursacht wird und die Ausführung des verbleibenden Programms angehalten wird.

Code:

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

Ausgabe:

Beispiel # 7

Im folgenden Programm wird keine Ausnahme aufgerufen, da es nicht explizit aufgerufen wird und die Ausführung des verbleibenden Programms fortsetzt.

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

Ausgabe:

Vorteile von Destructor in Java

  1. Der Destruktor zerstört den vom Konstruktor erstellten Wert, um Platz im Heapspeicher zu schaffen.
  2. Destruktor wird immer am Ende des Programms aufgerufen.
  3. Destruktor ist nie überlastet destruktor hat kein Argument.
  4. Sie müssen unseren Konstruktor nicht definieren, der Compiler erstellt für uns einen.

Fazit

Hoffe, dieser Artikel war interessant und informativ für Sie beide, um das Thema zu lernen. Dieser Artikel behandelt fast alle Themen, die Sie suchen, und die Hoffnung erfüllt alle Ihre Anforderungen.

Empfohlene Artikel

Dies war eine Anleitung zu Destructor in Java. Hier haben wir die Definition von Destruktor in Java besprochen. Wie funktioniert Destruktor in Java mit Methoden, Vorteilen und verschiedenen Beispielen. Sie können auch unseren anderen vorgeschlagenen Artikel durchgehen, um mehr zu erfahren.

  1. Was ist Java Interface?
  2. Was ist Java Interface?
  3. Java-Tools
  4. Layout in Java
  5. Konstruktor und Destruktor in Java
  6. Beispiele für Destructor in Python
  7. JRE vs JVM | Top 8 Unterschiede zu (Infografiken)
  8. Destruktor in PHP mit Beispielen