Maison  >  Article  >  Java  >  Finaliser en Java

Finaliser en Java

王林
王林original
2024-08-30 16:10:59387parcourir

Finalize est une méthode en Java. Cette méthode finalizes () est similaire à la méthode main. Cette méthode finalizes () est appelée juste avant que l'objet ne soit récupéré. Cela signifie la dernière chance de l'objet d'origine d'effectuer des activités de nettoyage telles que la libération de ressources système, la fermeture de connexions telles que la base de données, l'ouverture de fichiers, etc. Le principal problème avec la méthode finalize est qu'il n'y a aucune garantie par la spécification du langage Java (JLS) qui sera appelée. par le garbage collector ou quand il sera appelé. Prenons un exemple dans lequel un objet peut attendre jusqu'à une durée indéterminée après qu'il soit devenu éligible au garbage collection. Cela signifie avant que sa méthode finalize() ne soit appelée. De la même manière, après avoir finalisé la méthode appelée sans garantie, elle sera immédiatement collectée. Cela n’a donc aucun sens d’effectuer des activités critiques dans la méthode finalize(). Cela peut fonctionner dans une JVM, et cela peut ne pas fonctionner dans une autre JVM au moment du développement. La méthode finalize() est disponible dans java.lang.Object afin qu'elle soit automatiquement disponible pour toutes les classes pour le remplacement car Object est les classes 'classe de base.

Comment fonctionne la méthode finalize() en Java ?

Cette méthode finalizes () est appelée avant qu'un objet ne soit récupéré, cela signifie donc que nous ne pouvons pas appeler la méthode finalize () manuellement, tout comme les autres méthodes Java. Méthode finalize() appelée une seule fois par le thread garbage collector (GC).

PUBLICITÉ Cours populaire dans cette catégorie MODÉLISATION ET VALORISATION FINANCIÈRE - Spécialisation | 51 Série de cours | 30 tests simulés

Commencez votre cours de développement de logiciels libres

Développement Web, langages de programmation, tests de logiciels et autres

Code :

protected void finalize throws Throwable
{
//write some code
}

La méthode finalize() a une implémentation vide, et dans notre classe, des activités de nettoyage sont présentes, nous devons alors surcharger cette méthode finalize() pour définir nos activités de nettoyage.

Exemples d'implémentation de Finalize en Java

Voici quelques exemples mentionnés :

Exemple n°1

Exemple de méthode de remplacement de l'utilisateur de la méthode Finalize

Code :
Main.java

//creating class
public class Main {
//main method for run the Java application
public static void main(String[] args)
{
//Creating String object with some content
String string = new String("I am Amardeep");
//make the string reference to null for allow it for Garbage Collection
string = null;
// Calling gc method for Garbage Collection
System.gc();
//displaying some message to the user
System.out.println("\tI am in Main method");
}
//We are Overriding finalize method.
public void finalize()
{
//displaying some message to the user
System.out.println("\tI am feeling that I am Overriding finalize method");
}
}

Sortie :

Finaliser en Java

Explication : Si vous observez le résultat ci-dessus, vous pourriez être surpris de ne pas avoir finalisé la méthode de substitution. Si vous observez attentivement le code qui n'est pas une véritable méthode Java donnée, c'est comme une méthode créée par l'utilisateur, comme nous le savons, la signature de la méthode de finalisation réelle est protégée par void finalize(). Nous n'avons donc pas obtenu cela dans la sortie.

Exemple n°2

Finaliser la méthode en remplaçant l'exemple de méthode réelle

Code :
Main.java

//creating class
public class Main {
//main method for run the Java application
public static void main(String[] args)
{
//Creating Main object
Main main = new Main();
//make the main reference to null for allow it for Garbage Collection
main = null;
// Calling gc method for Garbage Collection
System.gc();
//displaying some message to the user
System.out.println("\tI am Amardeep from main method");
}
//We are Overriding finalize method.
@Override
protected void finalize()
{
//displaying some message to the user
System.out.println("\tI am actaully Overriding now.");
}
}

Sortie :

Finaliser en Java

Explication : Comme nous le voyons dans le résultat ci-dessus, nous avons obtenu le résultat de la méthode finalize() en raison du remplacement de la méthode finalize() réelle.

Exemple #3

Méthode Finalize à partir de l'exemple de bloc final

Code :
Main.java

//creating class
public class Main {
//main method for run the Java application
public static void main(String[] args)
{
//Creating Main object
Main main = new Main();
//make the main reference to null for allow it for Garbage Collection
main = null;
// Calling gc method for Garbage Collection
System.gc();
//displaying some message to the user
System.out.println("\tI am Amardeep from main method");
}
//We are Overriding finalize method.
@Override
protected void finalize() throws Throwable {
try{
//displaying some message to the user
System.out.println("\tFinalize of Paramesh");
}catch(Throwable t){
throw t;
}finally{
//displaying some message to the user
System.out.println("\tCalling finalize from finally block");
super.finalize();
}
}
}

Sortie :

Finaliser en Java

Exemple n°4

Méthode Finalize, exemple non garanti

Code :
FinalizeNotGuarantee.java

//package com.finalize;
public class FinalizeNotGuranteed implements Runnable {
//user defined method
private void getMyMethod() throws InterruptedException {
//try block
try {
System.out.println("Hi, I am TRY");
throw new NullPointerException();
//catch block
} catch (NullPointerExceptionnpe) {
System.out.println("Hi, Iam CATCH");
//finally block
} finally {
System.out.println("Hi, I am FINALLY");
}
}
//overriding finalize method
@Override
protected void finalize() throws Throwable {
System.out.println("I am kinside finalize block");
super.finalize();
}
//overriding Thread run method
@Override
public void run() {
try {
getMyMethod();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
for (int i = 1; i<= 3; i++) {
//start the thread method run by using start method
new Thread(new FinalizeNotGuranteed()).start();
}
}
}

Sortie :

Finaliser en Java

Explication : L'exemple ci-dessus illustre clairement que la méthode finalize ne garantit pas toujours son exécution.

Conclusion

La méthode Java finalizes () est utilisée pour collecter l'objet récupéré. Cette méthode est appelée juste avant l’appel de la méthode GC(). L'exécution de cette méthode n'est pas toujours garantie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Décodage Java Base64Article suivant:Décodage Java Base64