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

Java lernen von Kopf bis Fuß

Wenn du Java lernen möchtest, kannst du an meinem kostenlosen Java Kurs teilnehmen. Aber manch Einer hätte gern eine zweite Meinung. Und da bieten sich natürlich Java Bücher an. Eines dieser Java Bücher möchte ich dir jetzt vorstellen. Dieses Buch nennt sich „Java von Kopf bis Fuß“. Was kannst du von diesem Buch erwarten? Also […]

So kannst du Java Arrays anlegen

Java Arrays anlegen

Java Arrays– Was ist das? Stell es dir einmal als ein Bücherregal vor. In einem Bücherregal befinden sich sämtliche Bücher. Und diese befinden sich schön nebeneinander. Jedes Buch hat seinen festen Platz. Du kannst die Bücher ganz genau lokalisieren. Zum Beispiel kannst du sagen. Das erste Buch von links Das dritte von rechts usw. Und […]

Der Aufbau von Java Klassen

Java Klassen Aufbau

Jedes Java Programm besteht aus Java Klassen. Doch wie sind diese aufgebaut? Wie setzt sich die Struktur zusammen? Wo befinden sich Klassen hierarchisch? Was kommt in die Klassen rein und wie wird es integriert? Das sind die Fragen, welche ich in diesem Artikel beantworten werde. Doch bevor wir bei den Klassen ansetzen, müssen wir eine […]

Warum Java Kommentare immer ein Mittel der Kommunikation sind

Java Kommentare Kommunikation

Kennst Du die Bücherreihe „Miteinander reden“ von Schulz von Thun? Falls Du an der Uni warst oder bist, gehört dieses Buch zur Standardlektüre im Fach Schlüsselkompetenz. Denn ein Java Entwickler, welcher im Team arbeitet, muss klar und deutlich kommunizieren können. Und klar und deutlich heißt nicht, dass die Aussprache Deiner Worte verständlich sein soll. Nein […]

Java For Each Schleife – Aufbau und Funktionsweise

Java for each Schleife

In einer anderen Lektion habe ich dir bereits gezeigt, wie du ein Java Array mit einer for-Schleife füllen und dir später die Werte zurückgeben lassen kannst. Es gibt allerdings einen weiteren Schleifentyp, welche geradezu prädestiniert ist für Java Arrays. Dieser Schleifentyp nennt sich for each Schleife. In diesem Beitrag möchte ich dir zeigen, wie du […]

Nutze die richtigen Methoden zum Java Lernen

Java lernen Methoden

Ich lernte die Java Programmierung auf die klassische Art. Ich kaufte mir das erste Buch und los ging es. „Jetzt wirst du Java lernen“ – sagte ich zu mir. Ich war relativ schnell ziemlich frustriert, denn irgendwie fehlten mir ein paar Zusammenhänge. Kennst du das? Du hast ein Wissensfetzen und noch einen. Aber das Wichtigste. […]

So kannst du in drei einfachen Schritten Java Arrays dynamisch vergrößern

Java Arrays vergrößern

Es ist der 31.März 1727. Es ist ein Montag. Die Welt nimmt Abschied von einem sehr bedeutenden Weltveränderer. Seine Sichtweisen beeinflussen, heute noch, die Forschung und Entwicklung im Bereichen der Physik und Chemie. Ja selbst unser aller Leben – unsere Sicht auf die alltäglichen Dinge – wurden durch seine Denkstöße revolutioniert. Dieser große Vorreiter starb […]

So nutzt du getter und setter Methoden bei der Java Programmierung

Java Keyword private

In diesem Artikel möchte ich dir zeigen, wie du Instanzvariablen innerhalb der Java Klasse schützt. Und den Zugriff nur noch indirekt über getter und setter Methoden anbietest. Stell dir vor. Du hast ein Programm zur Lagerverwaltung geschrieben. Dieses Programm dient Möbelhäusern dazu, ihre Bestände zu verwalten. Und das Programm erwartet vom Nutzer gewisse Eingaben zu […]

So richtest du einen Schreibschutz für deine Java Variablen ein

Stell dir vor: Du hast erfolgreich dein erstes Programm für die Personalabteilung aufgesetzt. Du hast deine ersten 1000 Datensätze schön sauber angelegt. Und nun kommt dein Kollege und überschreibt die Vornamen der ersten 100 Mitarbeitern. Na schöne Sch…. 🙂 Wie kann das passieren? Wie kann man das verhindern? Du brauchst eigentlich nur deine Java Variablen […]