Destruktor in Java
Der Destruktor ist das Gegenteil eines Konstruktors. Auf der einen Seite, wo ein Konstruktor verwendet wird, um ein Objekt zu initialisieren, wird ein Destruktor verwendet, um ein Objekt zu zerstören (zu löschen), wodurch die durch das Objekt belegte Ressource freigegeben wird.
In diesem Tutorial werden Destruktoren in Java, ihre Funktionsweise und ihre Methoden erläutert.
Java hat weder Destruktoren noch ein direktes Äquivalent dazu. Trotzdem ist es eine mächtige Sprache, und ein Grund dafür ist der Garbage Collector. Java stellt uns einen Garbage Collector zur Verfügung, der ähnlich wie ein Destruktor funktioniert. Der Garbage Collector, ein Programm (Thread), das auf Java Virtual Machine (JVM) ausgeführt wird, gibt automatisch den Speicher frei, indem es die nicht verwendeten Objekte löscht.
In Java werden die Zuweisung und Freigabe von Speicher von diesem Garbage Collector effizient gehandhabt. Wenn der Lebenszyklus eines Objekts abgeschlossen ist, erscheint der Garbage Collector, löscht dieses Objekt und gibt den von diesem Objekt belegten Speicher frei oder gibt ihn frei. Diese Methode wird auch als Finalizer bezeichnet, die nicht deterministisch sind. Das Problem ist jedoch, dass der Aufruf dieser Methode (Finalizer) nicht garantiert ist, da sie implizit aufgerufen wird.
Funktionsweise von Destruktoren und der Methode finalize()
in Java
Wenn ein Objekt in Java erstellt wird, belegt es Speicher im Heap. Threads verwenden diese Objekte weiter, und wenn ein Thread das Objekt nicht verwendet, kommen sie für die Garbage Collection durch den Garbage Collector in Frage. Somit wird der von diesen Objekten belegte Speicher nun frei und kann von jeder neuen Entität weiter verwendet werden. Wenn der Garbage Collector ein Objekt zerstört, ruft die Java Runtime Environment (JRE) die Methode finalize()
auf, um die Verbindungen wie Netzwerk- und Datenbankverbindungen zu schließen.
Wir können den Garbage Collector nicht zwingen, das Objekt auszuführen und zu zerstören. Aber Java bietet hier eine alternative Methode. Das Java-Objekt stellt uns die Methode finalize()
zur Verfügung, die ähnlich wie ein Destruktor funktioniert. Es kann jedoch nur einmal aufgerufen werden.
Der Punkt, den Sie verstehen sollten, ist, dass die Methode finalize()
kein Destruktor ist, sondern zusätzliche Sicherheit bietet und außerdem externe Ressourcen wie das Schließen der Datei vor dem Beenden der Operation (des Programms) sicherstellt und ähnlich wie der Destruktor funktioniert.
Siehe den Code unten.
public class Dest_java {
public static void main(String[] args) {
Dest_java des = new Dest_java();
des.finalize();
des = null;
System.gc();
System.out.print("main() method ");
}
protected void finalize() {
System.out.print("Destroyed ");
}
}
Ausgabe:
Destroyed main() method Destroyed