Drei Möglichkeiten um Java Objekte zu zerstören
Schlagwörter: Java Instanzen, Java Speicherverwaltung


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.

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.

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.

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.

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
Schlagwörter: Java Instanzen, Java Klasse, Java Methoden, Java Programmierung
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 […]
Schlagwörter: Java Instanzen, Java Methoden, Java Programmierung
Du ahnst es. Im letzten Artikel hast du von mir erfahren, wie du ein Java Objekt erstellst und wie du dann auf die Instanzvariablen des Objektes zugreifen kannst. So kannst Instanzmethoden für deine Java Objekte nutzen Bei den Instanzmethoden funktioniert es auch so. Du erschaffst beliebig viele Java Objekte und […]
Schlagwörter: Java Instanzen, Java Übungen
In dieser Java Übung geht es um Mahnungen. Ja, Mahnungen zu Rechnungen.
Schlagwörter: Java Instanzen, Java Klasse, Java Übungen
In dieser Java Übung, wirst du ein Objekt erstellen.
Schlagwörter: Java Instanzen, Java Konstruktor, Java Programmierung
Du kannst deinen Java Konstruktoren auch Objekte übergeben. Bisher haben wir in der Parameterliste lediglich primitive Datentypen übergeben.
Schlagwörter: Java Instanzen, Java Klasse
Wie kannst du die Instanzen der Java Klassen zählen? Ganz einfach. Am besten ist es, wir bleiben beim Einführungsbeispiel zu den Java Klassen. Und ich wähle die Klasse „Monster“. Um es einfach zu halten, soll auch der Programmstart durch die Klasse erfolgen. Die Klasse bietet somit eine main-Methode an.
Schlagwörter: Java Instanzen, Java Klasse, Java Programmierung
Lass uns jetzt ein paar Java Objekte erstellen. Im letzten Beitrag habe ich dir gezeigt, was nötig ist um ein Java Programm überhaupt zu starten. Ich habe dir gezeigt, wie du eine zweite Klasse anlegst und die main Methode implementierst. Du hast gesehen, dass die Anweisung, welche wir in die […]
Schlagwörter: Java Instanzen, Java Programmierung
Wie werden aus deinen Java Klassen richtig nützliche Java Objekte? Das ganze läuft in vier Phasen ab. Und diese Phasen möchte ich dir in diesem Beitrag vorstellen. Ob das nützlich ist? Schau dir das Bild an. Am Ende dieses Beitrages wirst du wissen, warum Eclipse dir hier eine Fehlermeldung gibt […]
Schlagwörter: Java Speicherverwaltung, Java Strings
Du kennst das. Es ist abends. Du sitzt gemütlich vor dem Fernseher. Das Smartphone bimmelt. Kein Anruf. Nein – Eine Nachricht. Du liest die Nachricht sofort und antwortest darauf. Minuten später bekommst du die nächste Nachricht. Und auch auf diese antwortest du. Im Laufe des Abends entsteht daraus eine nette […]
Schlagwörter: Java Instanzen, Java Klasse, Java Programmierung, Java Variablen
Ja, ich fange sämtliche Artikel so an. Und du weißt es mittlerweile. Aber die Java Klassen stellen Baupläne für die Objekte dar, welche du erschaffen willst. Und in so einem Bauplan oder einer Gebrauchsanweisung brauchst du zwingend bestimmte Eigenschaften. Ich habe dir ja im letzten Artikel gezeigt, wie du eine […]
Schlagwörter: Java Instanzen, Java Klasse, Java Vererbung
Java Vererbung hat nichts mit Biologie zu tun. Die Genetik besagt, dass bestimmte Merkmalsausprägungen von den Eltern auf die Kinder übergehen. Solche Merkmalsausprägungen sind: die Hautfarbe die Haarfarbe die spezifische Größe und weitere körperliche Merkmale. Und in Java – was ist da Vererbung? Lass es uns herausfinden. Was erwartet dich […]
Schlagwörter: Java Instanzen, Java Speicherverwaltung
Java hat eine interne Speicherverwaltung. Eigentlich ist es nicht nur eine. Es sind mehrere. Uns interessieren nur zwei. Methoden und lokale Variablen werden auf dem Stack verwaltet. Und die Speicherverwaltung für Java Objekte und den Instanzvariablen findet auf dem Heap statt. Ja wieso braucht Java eigentlich zwei Speichersysteme? […]
Schlagwörter: Java Instanzen, Java Klasse, Java Programmierung, Java Variablen
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 zwischen […]
Schlagwörter: Java Instanzen, Java Klasse
Die Instanzierung von Java Klassen verhindern. Was heißt das? Instanzen sind die Objekte einer Java Klasse. Und Instanzieren oder Instanzierung heißt nichts anderes, als Objekterstellung. Aber was soll das? Oder mal anders gefragt: Wieso sollte man verhindern, dass eine Java Klasse – Objekte erstellen kann? Schließlich sind doch Objekte der […]
Schlagwörter: Java Methoden, Java Speicherverwaltung
Java Methoden werden beim Aufruf gestapelt. Und jedes Element auf dem Stapel nimmt Speicherplatz weg. Und manchmal ist es so, dass der Stapel richtig hoch wird und dann…. Ja was passiert eigentlich dann? Betrachten wir einmal ein Computerspiel. Irgendeines. In diesem Computerspiel gibt es Vögel, welche abgeschossen werden sollen. Was […]
Schlagwörter: Java Instanzen, Java Übungen
In dieser Java Übung geht es um Objekte und es geht um Referenzvariablen. Es geht um den Zugriff auf Java Objekte durch mehr als eine Referenzvariable. Erstelle dazu eine Java Klasse, namens „ReferenzTest“. Dieser Klasse führt drei Instanzvariablen a, b und c, vom Datentyp Integer.
Schlagwörter: Java Instanzen, Java Programmierung
Auf Java Objekte greifst du mit einer Art Fernsteuerung zu. Diese bezeichnet man als Referenz oder als Verweis. Und diese Referenzvariablen möchte ich dir jetzt einmal vorstellen. Doch bevor wir loslegen, lass mich noch ein paar Dinge loswerden. Ich habe es ja schon einmal in einem früheren Beitrag erwähnt. Java […]
Schlagwörter: Java Instanzen, Java Methoden, Java Übungen
In dieser Java Übung möchte ich dir zeigen, dass du auch in Klassenmethoden auf Objekte und deren Instanzvariablen zugreifen kannst. Schau dir dazu einmal diesen Java Code an. public class Umwandlung { private int x; public int getX() { // getter Methode return x; } public void setX(int x) { […]
Schlagwörter: Java Instanzen, Java Klasse, Java Vererbung
Im letzten Beitrag habe ich dir das Java Vererbung Konzept an einem Beispiel vorgestellt. In dem Beispiel-Rollenspiel gab es Klassen zu Helden und Superhelden. Ich habe dir die Vererbungshierarchien theoretisch erläutert. Jetzt geht es ans Praktische. In diesen Beitrag lernst du: Wie du bestehende Java Klassen erweiterst Wie du Objekte […]