Supprimer un objet dans Java

Rupam Yadav 12 octobre 2023
  1. Java Supprimer un Object en le référençant par null
  2. Java Supprime un objet confiné dans un périmètre en le référençant à null
Supprimer un objet dans Java

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
Auteur: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

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

Article connexe - Java Object