Skip to main content

Drei Möglichkeiten um Java Objekte zu zerstören

Java Objekte leben genau solange, wie eine Referenzvariable auf sie zeigt.
Wenn dieser Zeiger nicht mehr existiert, wird dieses Objekt aufgeben.

Und wenn dieses Objekt erst einmal aufgegeben wurde, dann kommt der Garbage Collector und entsorgt dieses.

Aber wie kannst du nun am Sinnvollsten Objekte aufgeben?
Lass es uns herausfinden.

Nehmen wir an, du hast ein Ballerspiel programmiert.
In diesem fliegen Vögel hin und her.
Diese müssen abgeschossen werden.

Jeder Vogel ist ein Objekt.
Und sobald dieser abgeschossen wurde, soll das Objekt zerstört werden.

Die erste Möglichkeit Java Objekte zu zerstören

Besteht darin den Verweis zu ändern.

Du kannst die Referenzvariable von einem Objekt auf ein anderes Objekt um-switchen.

Und wie?
Du hast zwei Referenzvariablen, wie hier im „Java-VogelSpiel-Code“:


public class VogelSpiel {
int vogelGroesse; // Größe in Pixel
 
 
public static void main(String[] args) {
VogelSpiel refEins = new VogelSpiel(); //refEins verweist auf Erstes Objekt
VogelSpiel refZwei = new VogelSpiel(); //refZwei verweist auf ein anderes Objekt
}
}

Die main-Methode liegt auf dem Stack und mit ihr die beiden lokalen Variablen „refEins“ und „refZwei.“
Beide lokalen Variablen verweisen auf ein anderes Objektes, welches auf dem Heap liegt.

Java Objekte Zerstören Verweise

Wenn du jetzt die Variable „refEins“ auf das zweite Objekt um-switchst, dann verliert das erste Objekt seinen Verweis.
Dann zeigt keine Referenzvariable mehr auf dieses Objekt.
Java Objekte eliminieren

Das Objekt wird aufgegeben.
Der Garbage Collector kommt vorbei und entsorgt es.
Er schmeißt es vom Heap und Speicher wird freigegeben.

Und so würdest du dies im Java Code umsetzen:


public class VogelSpiel {
int vogelGroesse; // Größe in Pixel
 
 
public static void main(String[] args) {
VogelSpiel refEins = new VogelSpiel(); //refEins verweist auf Erstes Objekt
VogelSpiel refZwei = new VogelSpiel(); //refZwei verweist auf ein anderes Objekt
 
refEins = refZwei; //Um-switchen: Objekt 1 wird aufgegeben
}
}

Die zweite Möglichkeit um Java Objekte zu zerstören, setzt du mit Methoden um.

Ich lege einmal eine Klassenmethode an, namens „erschaffeUndZerstöre()“.

Die Methode macht zwei Dinge.
Zuerst erschafft sie ein neues Java Objekt aus der Klasse „VogelSpiel“.
Und dann zerstört sie dies gleich wieder.

Und so würde die Umsetzung der Methode aussehen:


public class VogelSpiel {
int vogelGroesse; // Größe in Pixel
 
static void erschaffeUndZerstoere(){
VogelSpiel refEins = new VogelSpiel();
refEins.vogelGroesse=17;
System.out.println("Vogel mit "+refEins.vogelGroesse+" Pixel erschaffen");
} //Am Methodenende wird Vogelspiel Objekt zerstört
 
 
public static void main(String[] args) {
erschaffeUndZerstoere();
}
}

Was passiert hier?

  • Die Methode wird in der main-Methode aufgerufen.
    Somit wird sie ausgeführt.
  • Die Methode landet somit auf dem Stack Speicher von Java.
  • Es wird eine lokale Variable „refEins“ angelegt.
    Und diese verweist auf ein Objekt im Heap.

Java Objekte zerstören Methode

Wenn die Methode an ihrem Ende angekommen ist.
Das heißt bei ihrer schließenden Methodenklammer.

Dann wird die Methode vom Stack-Speicher entfernt.
Und mit ihr wird die lokale Variable „refEins“ entfernt.

Java Objekte eliminieren Methode

Und dann?
Dann gibt es keine Variable, welche auf das Objekt zeigt.
Somit ist das Objekt Futter für den Garbage Collector.
Das Objekt wird zerstört.

Echt grausam, oder? 🙂

Die dritte Möglichkeit ein Java Objekt zu zerstören, besteht darin es auf Null zu setzen.

Du kannst einer Referenzvariablen den Wert null zuweisen.
Die „null“ steht dann für nichts – Für gar nichts.

Dazu nutzt du das Keyword null.

Und so geht’s.


public class VogelSpiel {
int vogelGroesse; // Größe in Pixel
 
static void erschaffeUndZerstoere(){
VogelSpiel refEins = new VogelSpiel();
refEins.vogelGroesse=17;
System.out.println("Vogel mit "+refEins.vogelGroesse+" Pixel erschaffen");
 
refEins=null; //Vogel ist jetzt schon zerstört
System.out.println(refEins.vogelGroesse); //Fehlermeldung NullPointer
} 
 
 
public static void main(String[] args) {
erschaffeUndZerstoere();
}
}

Du siehst, mitten in der Methode wird das Objekt zerstört.

Wenn du jetzt diesen Code ausführst….
Und dir die letzte Bildschirmausgabe anzeige lassen würdest, würde hier die Fehlermeldung kommen.
Probiere es ruhig aus und klicke auf „Run“.

Der Compiler kann zu diesem Zeitpunkt das Objekt, welches zu „refEins“ gehört nicht mehr finden.
Und natürlich auch nicht die dazu gehörige Instanzvariable (größe).
Das Objekt wurde längst zerstört.

Zusammenfassung:

  • Objekte welche du nicht brauchst, solltest du auch nicht im Speicher halten.
    Du solltest diese zerstören.
  • Um Java Objekte zu eliminieren stehen dir drei Möglichkeiten zur Verfügung.
  • Entweder du entziehst ihnen den Verweis und richtest diesen auf ein anderes Objekt.
    Dadurch räumt der Garbage Collector dieses Objekt für dich ab.
  • Oder du erschaffst die Objekte durch Methoden.
    Die dazu gehörigen Referenzvariablen existieren dir dann nur solange die Methode ausgeführt wird.
    Nach Beendigung der Methode wird die Referenzvariable zerstört.
    Und somit existiert auch kein Verweis mehr zum Objekt.
    Also kommt auch hier der Garbage Collector und macht Platz.
  • Die dritte Möglichkeit besteht darin, der Referenzvariablen den Nullstatus zuzuweisen.
    Auch dadurch fehlt dann der Verweis und die entsprechenden Java Objekte werden zerstört.

Ähnliche Beiträge

So legst du Utility Klassen in Java an

Java Utility Klassen

Utility Java Klassen – was ist das? Man nennt diese auch Hilfsklassen von Java. Diese Utility Klassen sind Java Klassen, welche lediglich Methoden und Konstanten anbieten. Am Beispiel: Die Klasse Math ist so eine klassische Utility Klasse. Wozu braucht man solche Klassen? Diese Klassen sind so etwas wie ein Werkzeugkoffer für jedes Java Programm. Hier […]

Das Java Leben ist einfacher mit For-Schleife

Java For Schleife Aufbau

In einem anderen Artikeln habe ich bereits über Schleifen in Java gesprochen. In diesem Artikel möchte ich dir eine ganz besondere Schleife vorstellen. Warum ist diese so toll? Sie hat einen integrierten Schleifenzähler. Die Schleife zählt also bei jedem Durchlauf automatisch mit. Aber dazu gleich mehr…. Lass uns einmal so eine For Schleife anlegen.

8 Java Datentypen, die du kennen solltest

Java Datentypen

Java Datentypen Ich gebe zu, ich hasse dieses Thema. Denn es ist eigentlich nichts weiter als graue Theorie. Dennoch müssen wir dieses Thema behandeln. Um schnell in das Thema zu kommen, stelle ich dir eine Übersicht aller primitiven Datentypen zur Verfügung. Wieso primitive? Es gibt außer den primitiven Datentypen, noch Referenztypen. Und diese Referenztypen sind […]

Die vier verschiedenen Zahlensysteme in der Java Programmierung

Java Zahlensysteme

Java Zahlensysteme – Was soll das? In sämtlichen Programmiersprachen werden Zahlen in Variablen abgespeichert. Wenn du dir die einzelnen primitiven Datentypen in Java einmal anschaust – wirst du feststellen – dass die Masse der Datentypen Zahlen annehmen und speichern können. Zahlen und die Mathematik dahinter spielen in der Programmierung eine sehr große Rolle. Ganz am […]

Der bedeutende Unterschied zwischen Klassenvariablen und Instanzvariablen

Java Klassenvariablen

Bei der Java Programmierung unterscheidet man drei Arten von Variablen. Als erste Gruppe sind die lokalen Variablen zu nennen. Auf diese gehe ich in einem separaten Artikel ein. Mich interessieren die zwei anderen Variablentypen. Zum einen existieren Klassenvariablen. Und dann sind da noch die Instanzvariablen. Wo liegt der Unterschied? Instanzvariablen stehen einem Objekt zur Verfügung. […]

Die drei Bestandteile aller Java Klassen

Java Klassen Bestandteile

Java ist eine objektorientierte Programmiersprache. Was heißt das? Ja… Anscheinend hat es etwas mit Objekten zu tun. Also was ist ein Objekt? Ein Objekt ist ein bestimmtes Konstrukt im Programm. Bauen wir ein Spiel. Ein Grafik-Adventure. Du kennst das. Ein Held wird in eine bestimmte Spielwelt hinein gesteckt. Der Held muss mit bestimmten Personen sprechen. […]

3 Möglichkeiten um Vererbung von Java Klassen zu verhindern, zu verbieten oder ausschließen

Java Vererbung verhindern

Die ganze Java Vererbung für bestimmte Klassen ausschließen bzw. verhindern oder verbieten. Was soll das? Für bestimmte Java Klassen soll die Vererbung ausgeschlossen werden. Es soll also verhindert werden, dass Elternklassen – Kindklassen bekommen können. Klingt ein bisschen wie Verhütung, oder? Denn wie auch im echten Leben, können Kinder zu kleinen Tyrannen werden. Sie bedienen […]

Java for Schleifen schachteln – So funktioniert es

Java For Schleifen schachteln

Diese Situation kennst du doch auch…. Du stehst an der Haltestelle und wartest auf den Bus. Dein Blick fällt auf die Uhr.   Oder du wartest an der Ecke auf deinen Freund oder Kollegen. Immer wieder schaust du auf deine Uhr.   Sie ist kaum noch wegzudenken. Die mobile Taschenuhr.   Lange Zeit wurde die […]

Java Übung 27 – Auf zur Mathe-Olympiade

Java Übung Mathe Olympiade

In dieser Java Übung möchte ich mit dir ein Programm erstellen, welches ein Mathematik-Test oder eine Mathe-Olympiade simuliert. Du kennst das vielleicht noch aus der Schule. Matheolympiade- Da wurden aus allen vier Grundrechenarten, Aufgaben formuliert. Die Schüler mussten diese Aufgaben lösen. Die Lehrer kontrollierten die Lösungen. Und der Schüler, welcher die wenigsten Fehler hatte – […]