Introduction à Destructor en Java

Les destructeurs en Java peuvent être appris avec la méthode finalize en Java. Le concept est le même que la méthode de finalisation. Java fonctionne pour tous sauf le destructeur à l'aide de la récupération de place. Par conséquent, dans le cas où il y a un besoin d'appeler le destructeur, cela peut être fait à l'aide de la méthode finalize. Cette méthode n'est pas indépendante car elle repose sur Garbage Collection. Le garbage collector est un thread qui supprime ou détruit l'objet inutilisé dans la zone de tas. Dites si l'objet est connecté à un fichier ou dites une application de base de données ou des connexions réseau, avant de supprimer ou de détruire l'objet, il doit fermer toutes les connexions liées à ces ressources avant que la récupération de place n'ait lieu. Cette fermeture des fonctions se fait en appelant la méthode finalize.

Définition de destructeur en Java

«Destructor est une méthode appelée lorsque la destruction d'un objet a lieu. "Le principal objectif du destructeur est de libérer la mémoire allouée et également de nettoyer les ressources comme la fermeture des fichiers ouverts, la fermeture des connexions à la base de données, la fermeture des ressources réseau, etc.,

Syntaxe

Class Object
(
protected void finalize()
(
//statements like closure of database connection
)
)

Comment fonctionne Destructor en Java?

Le destructeur a une méthode finalize () en java qui est similaire au destructeur en C ++. Lorsque les objets sont créés, ils sont stockés dans la mémoire du tas. Ceux-ci sont accessibles par les threads principaux ou enfants. Ainsi, lorsque ces objets ne sont plus utilisés par le thread principal ou ses threads enfants, ils deviennent éligibles pour le garbage collection et la mémoire qui a été acquise devient désormais disponible par la création de nouveaux objets. Avant qu'un objet ne soit un garbage collecté par le garbage collector, le JRE (Java Runtime Environment) appelle la méthode finalize () pour fermer les flux d'entrée-sortie, les connexions à la base de données, les connexions réseau, etc. Notez que la méthode finalize appelée est protégée. Pourquoi finalize est protégé car il peut être appelé par la classe de base ou la classe dérivée? La méthode finalize est présente dans la classe Object. Ainsi, au cas où vous voudriez appeler cette méthode de finalisation à partir d'autres objets, vous pouvez la changer en public.

Syntaxe:

protected void finalize throws Throwable()
(
//Keep some resource closing operations here
)

Méthodes de finalisation ()

  1. La méthode finalize () est protégée comme définie dans la classe java.lang.Object.
  2. La méthode finalize () n'est appelée qu'une seule fois.
  3. pour remplacer la méthode finalize (), vous devez appeler explicitement la méthode finalize.
  4. GC () est un service de JVM pour exécuter le Garbage Collection, il est appelé lorsque la mémoire du tas est pleine et a besoin de mémoire pour les nouveaux objets arrivant.
  5. JVM ignore toutes les exceptions, à l'exception des exceptions non vérifiées qui se produisent dans la méthode finalize.

Exemple 1

Dans le programme ci-dessous, la méthode de finalisation de la classe String correspondante est appelée à la place de la méthode de finalisation présente dans le programme. La méthode finalize est remplacée ici.

Code:

public class Demo
(
public static void main(String() args)
(
Integer i = new Integer(2);
i = null;
System.gc();
System.out.println("In the Main Method");
)
protected void finalize()
(
System.out.println("object is garbage collected ");
)
)

Production:

Exemple # 2

Dans le programme ci-dessous, la méthode finalize est appelée en interne, aucun appel explicite n'est requis.

Code

public class Demo
(
public static void main(String() args)
(
Demo dm = new Demo();
dm = null;
System.gc();
System.out.println("In the Main Method");
)
protected void finalize()
(
System.out.println("object is garbage collected ");
)
)

Production:

Exemple # 3

Dans le programme ci-dessous, la finalisation a été appelée en interne en fonction du nombre d'objets créés.

Code

public class NewProgram(
public void finalize()(
System.out.println("object is garbage collected");
)
public static void main(String args())(
NewProgram np1=new NewProgram(); //first instantiation of Class NewProgram
NewProgram np2=new NewProgram(); //second instantiation of Class NewProgram
np1=null;
np2=null;
System.gc();
System.out.println("In the Main Method");
)
)

Production:

Exemple # 4

Dans le programme ci-dessous, deux objets sont créés, la finalisation est appelée une fois car les deux objets pointent vers la même chose.

Code:

public class NewProgram(
public void finalize()(
System.out.println("garbage collected");
)
public static void main(String args())(
NewProgram np1=new NewProgram(); //first instantiation of Class NewProgram
NewProgram np2=new NewProgram(); //second instantiation of Class NewProgram
np1 = np2; // both now pointing to same object
System.gc();
System.out.println("in the Main Method");
)
)

Production:

Exemple # 5

Dans le programme ci-dessous, la méthode finalize sera appelée deux fois explicitement et en interne à la fois.

Code

public class Demo
(
public static void main(String() args)
(
Demo dm = new Demo();
dm.finalize();
dm = null;
System.gc();
System.out.println("In the Main Method");
)
protected void finalize()
(
System.out.println("garbage collected ");
)
)

Production:

Exemple # 6

Dans le programme ci-dessous, il existe une exception arithmétique appelée dans la méthode finalize car elle est explicitement appelée, ce qui provoque en outre l'exception et arrête l'exécution du programme restant.

Code:

public class Demo
(
public static void main(String() args)
(
Demo dm = new Demo();
dm.finalize();
dm = null;
System.gc();
System.out.println("In the Main Method");
)
protected void finalize()
(
System.out.println("garbage collected ");
System.out.println(10 / 0);
)
)

Production:

Exemple # 7

Dans le programme ci-dessous, il n'y a aucune exception appelée car il n'est pas appelé explicitement et continue l'exécution du programme restant.

Code:

public class Demo
(
public static void main(String() args)
(
Demo dm = new Demo();
dm = null;
System.gc();
System.out.println("In the Main Method");
)
protected void finalize()
(
System.out.println("garbage collected ");
System.out.println(10 / 0);
)
)

Production:

Avantages de Destructor en Java

  1. Le destructeur détruit la valeur créée par le constructeur pour l'espace dans la mémoire de tas.
  2. Destructor est toujours appelé à la fin du programme.
  3. Le destructeur n'est jamais surchargé. Le destructeur ne prend aucun argument.
  4. Pas besoin de définir notre constructeur, le compilateur en crée un pour nous.

Conclusion

J'espère que cet article a été intéressant et instructif pour vous d'apprendre le sujet. Cet article a couvert presque tous les sujets que vous recherchez et espère répondre à toutes vos exigences.

Articles recommandés

Cela a été un guide pour Destructor en Java. Ici, nous avons discuté de la définition du destructeur en Java, comment fonctionne le destructeur en java avec des méthodes, des avantages et différents exemples. Vous pouvez également consulter notre autre article suggéré pour en savoir plus-

  1. Qu'est-ce que l'interface Java?
  2. Qu'est-ce que l'interface Java?
  3. Outils Java
  4. Disposition en Java
  5. Constructeur et destructeur en Java
  6. Exemples de destructeurs en Python
  7. JRE vs JVM | 8 principales différences avec (infographie)
  8. Destructeur en PHP avec des exemples