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 kannst du Eclipse installieren

Eclipse installieren

Das Schöne an Eclipse ist, es läuft auf sämtlichen Betriebssystemen. Eclipse wird einfach auf der Webseite des Herstellers herunter geladen und kann dann installiert werden. Dabei stehen dir verschiedene Versionen zur Verfügung.

Java Duales Zahlensystem – Binäre Zahlen in Java umwandeln

Java Dual System

Das duale Zahlensystem hat viele Bezeichnungen. Oft wird auch es Dualsystem oder Binärsystem genannt. Es besteht aber immer aus 2 Zahlen. Man verwendet oft die Zahlen 0 und 1. Es können aber auch sämtliche anderen Zahlenpaare sein. Zum Beispiel 7 und 175 sind für sich genommen, auch ein normales Zahlenpaar und somit ein Dualsystem. Mit […]

Du musst in Java nicht jede Exception fangen

Java Exception fangen

Kennst du die Metapher mit dem Jongleur und den Bällen? Ein Jongleur hält drei Bälle in der Luft, dann vier und irgendwann fünf. Aber irgendwann ist es genau ein Ball zu viel. Und Alles bricht zusammen. Ja ein Ball zu viel, kann alles versauen. 🙂 Und so ist es doch immer im Leben. Du kannst […]

Java Übung 24 – So kannst du Kommazahlen runden

Java Übung runden

In dieser Java Übung möchte ich mit dir Zahlen runden. Ich bitte dich deshalb: Erstelle eine Klasse „RundenUebung“. Lege dann eine statische Methode rundeZahl() an. Diese erwartet zwei Parameter. Parameter 1 ist die Kommazahl, welche gerundet werden soll. Als zweiten Parameter wird eine ganze Zahl übergeben, welche die Nachkommastelle – bis auf welche letztlich gerundet […]

So kannst du Instanzen in Java Klassen zählen

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.

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 […]

Java lernen – 10 nützliche Tipps für Java Anfänger

Java Lernen Anfänger

Wenn du die Programmiersprache Java lernen möchtest, bist du hier prinzipiell erst einmal richtig. Und wenn du es wirklich ernst meinst und in die Java Programmierung einsteigen möchtest, solltest du auch meinen kostenlosen Java Kurs beanspruchen. Wenn du dabei bist, bekommst du: Eine Lektion pro Woche zu den Basics. Hier geht es um die ersten […]

So kannst du Java Konstruktoren anlegen und überladen

Java Konstruktoren

Der Name sagt es schon. Java Konstruktoren konstruieren oder bauen Java Objekte. Und diese Objekte baut der Konstruktor auf Vorlage der entsprechenden Java Klasse. In diesem Beitrag zeige ich dir natürlich verschiedene Ansätze wie du den Konstruktor einsetzt. Ich zeige dir dies Schritt für Schritt. Dabei zeige ich dir auch verschiedene Dinge, welche nicht funktionieren. […]

Polymorphie bringt Vorteile für Java Arrays

Java Polymorphie Arrays

Wenn Java Arrays, Schubladen oder Container sein sollen… Dann wäre der Gebrauch einer solchen Schublade ziemlich einseitig und festgefahren. Denn in jedes Array passen zwar mehrere Daten – aber immer nur vom gleichen Datentyp. Immer gleicher Datentyp? Also eine Schublade nur für Socken, Unterwäsche und der ganze andere Kram passt dann eben nicht hinein. Um […]

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 […]

Von Java Klassen zum Java Programm – Der Programmstart

Java Klassen ausführen

In den letzten Beiträgen hast du gelernt, wie Java Klassen erstellt werden und aufgebaut sind. In diesem Beitrag geht es um den Programmstart. Ich will dir zeigen, was nötig ist, dass du ein Java Programm ausführen kannst. Und ich zeige dir außerdem, wie du eine Startklasse in einem x-beliebigen Javaprogramm anlegst. Wie auch schon zuvor, […]