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

Nutze das Java Switch Case Statement für komplexe Verzweigungen

Java Switch case

Java switch case statement – was ist das? Wozu brauchst du das? Lass mich anders beginnen… 🙂 In einen meiner früheren Beiträge habe ich schon einmal über bedingte Anweisungen oder Zuweisungen geschrieben. Diese if und else Konstrukte funktionieren eigentlich ganz gut. Aber was ist, wenn du mehrere Parameter abfangen möchtest. Okay ein Beispiel…

So kannst du Java Konstanten bei der Programmierung nutzen

Java Konstanten – was kann man sich darunter vorstellen? Du kennst Konstanten in der Mathematik. Die Kreiszahl Pi ist so eine konstante Zahl. Diese Zahl ändert sich niemals. Sie beträgt immer rund 3,141592. In der Physik gelten die Lichtgeschwindigkeit, der Erdradius oder der absolute Nullpunkt als konstant. Selbst die Geschwindigkeit mit der sich die Erde […]

Java Übung 31: Speichere deine Würfe im Array

Java Übung Array Würfelspiel

In dieser Java Übung soll ein Würfelspiel simuliert werden. Lege eine Klasse namens, Würfelspiel an. Diese Klasse enthält eine statische Methode, namens würfeln(). Diese Methode erwartet einen Parameter vom Datentyp Integer, namens „anzahlWuerfe“. Diese Variable/Parameter repräsentiert die Anzahl der Würfe. Nachdem der Methode die Anzahl der Würfe übergeben wurde, soll die Methode Zufallszahlen zwischen 1 […]

So nutzt du die While Schleife in deinem Java Programm

Java While Schleife

Manchmal ist es wichtig, Dinge einmal öfter zu tun. Bei der Java Programmierung kann es schonmal sein, dass du einen Code mehrfach ausführen lassen musst. Zum Beispiel die Zahlen eins bis zehn. Ein Java Programm, welches die Zahlen eins bis zehn wiedergibt. Na wie wäre das? Der Java Code dazu würde so aussehen: public class […]

So implementierst du Instanzmethoden in deine Java Klasse

Java Instanzmethoden

In einen der letzten Beiträge habe ich dir gezeigt, wie du eine Klasse anlegen kannst. Ich habe die Klasse „Mensch“ oder „Human“ angelegt und wir haben die erste Instanzvariable implementiert. Dein Code sollte jetzt so aussehen: public class Human { int size=156;//size in centimeter } In diesem Beitrag werde ich dir zeigen, wie du Java […]

Java Übung 17: Char-Zeichen mit For-Schleife

Java Übung Char Zeichen For Schleife

In dieser Java Übung werden wir uns die Zeichen des Character Datentypen näher anschauen. Die einzelnen Zeichen sollen auf der Konsole ausgegeben werden. Und wie? Das ganze sollst du mit einer For Schleife machen. Erstelle deshalb eine Klasse „CharZeichen“. In dieser Klasse implementierst du dann eine Klassenmethode, namens „gibZeichen“. Und im Methodenrumpf durchläuft eine For-Schleife […]

So verwendest du den Java Oder Operator

Java Oder Operator

Kennst du das auch aus deiner Schulzeit? Du schreibst eine Klassenarbeit in irgendeinem Fach. Nehmen wir einfach mal an – Mathe. Jetzt bist gerade fertig mit deiner Arbeit. Und zu Hause wirst du gefragt: „Und wie lief es?“ Du antwortet:“ Ganz gut. Es wird bestimmt eine Eins oder eine Zwei.“ Drei oder vier Tage später […]

Java Übung 25 – Simuliere eine Gelddruckmaschine

Java Übung Gelddruckmaschine

In dieser Java Übung geht es um Schleifen. Und zwar möchte ich, dass du eine virtuelle Geldruckmaschine erstellst. Was meine ich damit? Du gibst in der Konsole einen x-beliebigen Betrag ein und das Programm gibt dir virtuelle Geldscheine zurück. Ein Beispiel: Du gibst die Zahl 400 ein. Dann liefert dir das Programm 2 x 200 […]