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.
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ésCommencez 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.
Voici quelques exemples mentionnés :
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 :
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.
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 :
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.
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 :
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 :
Explication : L'exemple ci-dessus illustre clairement que la méthode finalize ne garantit pas toujours son exécution.
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!