Supprimer un objet dans Java
-
Java Supprimer un
Object
en le référençant parnull
-
Java Supprime un objet confiné dans un périmètre en le référençant à
null
Nous apprendrons comment supprimer un objet en Java et comment utiliser le collecteur d’ordures dans les exemples suivants.
Java Supprimer un Object
en le référençant par null
Dans le premier exemple de suppression d’un objet Java, nous créons une classe avec un constructeur qui initialise les variables name
et age
. Dans la méthode main
, un Object
de la classe User
est créé, et les valeurs de name
et age
sont passées. Maintenant que l’Object
a été initialisé, nous pouvons l’utiliser pour obtenir age
et le comparer pour afficher un message. Mais après cela, nous voulons supprimer myObject
afin qu’il ne puisse plus être utilisé.
Pour ce faire, nous initialisons une nouvelle fois myObject
, mais avec un zéro. Une fois que le myObject
est null
, nous ne pouvons l’utiliser pour appeler aucune de ses méthodes ou variables, et il lancera une exception si nous le faisons. System.gc()
est utilisé pour collecter les restes de déchets afin qu’il n’y ait plus de champs ou d’objets vides pour libérer la mémoire.
On peut voir qu’il y a une méthode finalize()
dans la classe User
. Il s’agit d’une méthode surchargée qui est appelée sur l’objet avant de collecter le garbage.
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.");
}
}
Production :
User age is : 30
Object is garbage collected.
Exception in thread "main" java.lang.NullPointerException
at com.company.JavaDeleteObject.main(JavaDeleteObject.java:18)
Java Supprime un objet confiné dans un périmètre en le référençant à null
Dans le code présenté ci-dessous, nous avons une classe Student
avec trois membres de données auxquels on attribue des valeurs en utilisant le constructeur paramétré de la classe. Elle possède une méthode showDetails()
et une méthode showNextIndex()
. Elle dispose également de la méthode finalize()
pour afficher l’index du prochain étudiant.
Les nouveaux objets de la classe Student
sont créés en utilisant le mot-clé new
. Les méthodes de la classe Student
sont appelées sur les objets student1
et student2
. Plus tard dans le code, nous avons créé d’autres objets de la classe Student
à l’intérieur d’une portée. Après les avoir utilisés, nous appelons System.gc()
, qui demande à la JVM
de collecter les deux objets créés dans cette portée.
La valeur du nextIndex
est incrémentée à 3
avant d’entrer dans la portée, et avant de quitter la portée, elle est 5
. Pour décrémenter la valeur du nextIndex
, la méthode finalize()
est appelée en utilisant System.runFinalization()
deux fois pour la valeur 5
avant que les objets ne soient collectés.
La valeur correcte du nextIndex
est alors affichée, en excluant les valeurs qui étaient dans le champ d’application.
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();
}
}
Production :
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