Heim >Java >javaLernprogramm >In Java abschließen
Finalize ist eine Methode in Java. Diese finalizes()-Methode ähnelt der main-Methode. Diese finalizes()-Methode wird unmittelbar vor der Garbage Collection des Objekts aufgerufen. Dies bedeutet, dass das ursprüngliche Objekt die letzte Chance hat, Bereinigungsaktivitäten wie das Freigeben von Systemressourcen, das Schließen von Datenbankverbindungen, das Öffnen von Dateiverbindungen usw. durchzuführen. Das Hauptproblem bei der finalize-Methode besteht darin, dass es keine Garantie durch die Java Language Specification (JLS) gibt, dass sie aufgerufen wird vom Garbage Collector oder wann es aufgerufen wird. Betrachten wir ein Beispiel, bei dem ein Objekt bis zu einer unbestimmten Zeit warten kann, nachdem das Objekt für die Garbage Collection infrage kommt. Das bedeutet, bevor die finalize()-Methode aufgerufen wird. Ebenso gibt es nach Abschluss der aufgerufenen Methode keine Garantie, sie werden sofort erfasst. Daher macht es keinen Sinn, kritische Aktivitäten innerhalb der finalize()-Methode auszuführen. Es funktioniert möglicherweise in einer JVM und möglicherweise nicht in einer anderen JVM zum Zeitpunkt der Entwicklung. Die Methode finalize() ist in java.lang.Object verfügbar, sodass sie automatisch allen Klassen zum Überschreiben zur Verfügung steht, da Object die Klassen sind ' Basisklasse.
Diese finalize()-Methode wird aufgerufen, bevor ein Objekt in den Garbage Collection-Prozess aufgenommen wird. Das bedeutet, dass wir die finalize()-Methode nicht wie andere Java-Methoden manuell aufrufen können. finalize()-Methode wird nur einmal vom Garbage Collector (GC)-Thread aufgerufen.
WERBUNG Beliebter Kurs in dieser Kategorie FINANZMODELLIERUNG & BEWERTUNG – Spezialisierung | 51 Kursreihe | 30 ProbetestsStarten Sie Ihren kostenlosen Softwareentwicklungskurs
Webentwicklung, Programmiersprachen, Softwaretests und andere
Code:
protected void finalize throws Throwable { //write some code }
Die finalize()-Methode hat eine leere Implementierung und in unserer Klasse sind Bereinigungsaktivitäten vorhanden. Dann müssen wir diese finalize()-Methode überschreiben, um unsere Bereinigungsaktivitäten zu definieren.
Im Folgenden sind einige Beispiele aufgeführt:
Beispiel zum Überschreiben einer Methode durch den Benutzer finalisieren
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"); } }
Ausgabe:
Erklärung: Wenn Sie die obige Ausgabe beobachten, werden Sie möglicherweise überrascht sein, dass Sie die Überschreibungsmethode nicht finalisiert haben. Wenn Sie sich den Code genau ansehen, bei dem es sich bei der gegebenen überschriebenen Methode nicht um eine echte Java-Methode handelt, handelt es sich genau um eine vom Benutzer erstellte Methode, da wir wissen, dass die tatsächliche Finalisierungsmethode durch die Signatur geschützt void finalize() geschützt ist. Wir haben dies also nicht in der Ausgabe erhalten.
Finalisieren Sie die Methode und überschreiben Sie das eigentliche Methodenbeispiel
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."); } }
Ausgabe:
Erklärung: Wie wir in der obigen Ausgabe sehen, finalisieren wir die Ausgabe der Methode finalize(), weil wir die eigentliche Methode finalize() überschreiben.
Methode aus dem Blockbeispiel finalisieren
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(); } } }
Ausgabe:
Beispiel für Finalisierungsmethode nicht garantiert
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(); } } }
Ausgabe:
Erklärung: Das obige Beispiel zeigt deutlich, dass die Ausführung der Finalize-Methode nicht immer garantiert ist.
Die Methode „Java finalizes()“ wird zum Sammeln des Garbage-Collected-Objekts verwendet. Diese Methode wird unmittelbar vor dem Aufruf der GC()-Methode aufgerufen. Es ist nicht immer garantiert, dass diese Methode ausgeführt wird.
Das obige ist der detaillierte Inhalt vonIn Java abschließen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!