Löschen eines Objekts in Java
-
Java Löschen ein
Object
durch Referenzierung aufnull
-
Java Löschen eines in einem Scope eingeschlossenen Objekts durch Referenzierung auf
null
In den folgenden Beispielen lernen wir, wie man ein Objekt in Java löscht und den Garbage Collector verwendet.
Java Löschen ein Object
durch Referenzierung auf null
Im ersten Beispiel zum Löschen eines Java-Objekts erstellen wir eine Klasse mit einem Konstruktor, der die Variablen name
und age
initialisiert. In der Methode main
wird ein object
der Klasse User
erzeugt, und es werden Werte für name
und age
übergeben. Nachdem das object
nun initialisiert wurde, können wir es benutzen, um age
zu erhalten und es zu vergleichen, um eine Nachricht anzuzeigen. Aber danach wollen wir myObject
löschen, damit es nicht weiter verwendet werden kann.
Um dies zu tun, initialisieren wir myObject
noch einmal, aber mit null. Sobald myObject
null
ist, können wir es nicht mehr verwenden, um eine seiner Methoden oder Variablen aufzurufen, und es wird eine Exception werfen, wenn wir dies tun. Mit System.gc()
wird jeglicher übriggebliebener Müll eingesammelt, so dass keine leeren Felder oder Objekte mehr vorhanden sind, die den Speicher freigeben.
Wir können sehen, dass es in der Klasse User
eine Methode finalize()
gibt. Es handelt sich um eine überschriebene Methode, die auf dem Objekt aufgerufen wird, bevor der Garbage gesammelt wird.
public class JavaDeleteObject {
public static void main(String[] args) {
User myObject = new User("John", 30);
int userAge = myObject.age;
if (userAge > 25) {
System.out.println("User age is : " + userAge);
} else {
System.out.println("User age is less than 25 : " + userAge);
}
myObject = null;
System.gc();
System.out.println(myObject.age);
}
}
class User {
String name;
int age;
User(String n, int a) {
name = n;
age = a;
}
protected void finalize() {
System.out.println("Object is garbage collected.");
}
}
Ausgabe:
User age is : 30
Object is garbage collected.
Exception in thread "main" java.lang.NullPointerException
at com.company.JavaDeleteObject.main(JavaDeleteObject.java:18)
Java Löschen eines in einem Scope eingeschlossenen Objekts durch Referenzierung auf null
In dem unten gezeigten Code haben wir eine Klasse Student
mit drei Datenmitgliedern, denen über den parametrisierten Konstruktor der Klasse Werte zugewiesen werden. Sie hat eine Methode showDetails()
und eine Methode showNextIndex()
. Außerdem verfügt sie über die Methode finalize()
, um den Index des nächsten Schülers anzuzeigen.
Neue Objekte der Klasse Student
werden mit dem Schlüsselwort new
erzeugt. Die Methoden der Klasse Student
werden für die Objekte student1
und student2
aufgerufen. Später im Code haben wir weitere Objekte der Klasse Student
innerhalb eines Bereichs erstellt. Nachdem wir sie benutzt haben, rufen wir System.gc()
auf, was die JVM
auffordert, die beiden in diesem Bereich erzeugten Objekte zu garbage collect.
Der nextIndex
-Wert wird vor dem Betreten des Bereichs auf 3
inkrementiert, und vor dem Verlassen des Bereichs auf 5
. Um den nextIndex
-Wert zu dekrementieren, wird die Methode finalize()
mit System.runFinalization()
zweimal für den Wert 5
aufgerufen, bevor die Objekte garbage collected werden.
Anschließend wird der korrekte nextIndex
-Wert angezeigt, wobei die Werte, die sich innerhalb des Bereichs befanden, ausgeschlossen werden.
class Student {
private int index;
private String name;
private int age;
private static int nextIndex = 1;
Student(String name, int age) {
this.name = name;
this.age = age;
this.index = nextIndex++;
}
public void showDetails() {
System.out.println("Student at Index : " + index + ", Student name: " + name + ", age: " + age);
}
public void showNextIndex() {
System.out.println("Next Index: " + nextIndex);
}
protected void finalize() {
--nextIndex;
}
}
class UseStudent {
public static void main(String[] args) {
Student student1 = new Student("John", 23);
Student student2 = new Student("Doe", 20);
student1.showDetails();
student2.showDetails();
student1.showNextIndex();
student2.showNextIndex();
{
Student student3 = new Student("Sam", 22);
Student student4 = new Student("Ben", 21);
student3.showDetails();
student4.showDetails();
student3.showNextIndex();
student4.showNextIndex();
student3 = student4 = null;
System.gc();
System.runFinalization();
}
student2.showNextIndex();
}
}
Ausgabe:
Student at Index : 1, Student name: John, age: 23
Student at Index : 2, Student name: Doe, age: 20
Next Index: 3
Next Index: 3
Student at Index : 3, Student name: Sam, age: 22
Student at Index : 4, Student name: Ben, age: 21
Next Index: 5
Next Index: 5
Next Index: 3
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn