In Java, welchen Zweck die Schlüsselwörter final
, finally
und finalize
erfüllen?
In Java, welchen Zweck die Schlüsselwörter final
, finally
und finalize
erfüllen?
Antworten:
final
kann verwendet werden, um eine Variable als "unveränderlich" zu markieren.
private final String name = "foo"; //the reference name can never change
final
kann auch eine Methode nicht "überschreibbar" machen
public final String toString() { return "NULL"; }
final
kann auch eine Klasse nicht "vererbbar" machen. dh die Klasse kann nicht untergeordnet werden.
public final class finalClass {...}
public class classNotAllowed extends finalClass {...} // Not allowed
finally
wird in einer try / catch-Anweisung verwendet, um Code "immer" auszuführen.
lock.lock();
try {
//do stuff
} catch (SomeException se) {
//handle se
} finally {
lock.unlock(); //always executed, even if Exception or Error or se
}
Java 7 hat einen neuen Versuch mit einer Ressourcenanweisung , mit der Sie Ressourcen automatisch schließen können, die java.io.Closeable oder explizit oder implizit implementieren java.lang.AutoCloseable
finalize
wird aufgerufen, wenn ein Objekt durch Müll gesammelt wird. Sie müssen es selten überschreiben. Ein Beispiel:
protected void finalize() {
//free resources (e.g. unallocate memory)
super.finalize();
}
Object#finalize()
Methode war in Java 9 ( JDK-8165641 ) veraltet .
Das letzte Schlüsselwort wird verwendet, um Konstanten zu deklarieren.
final int FILE_TYPE = 3;
Das Schlüsselwort finally wird in einer try catch-Anweisung verwendet, um einen Codeblock anzugeben, der unabhängig von ausgelösten Ausnahmen ausgeführt werden soll.
try
{
//stuff
}
catch(Exception e)
{
//do stuff
}
finally
{
//this is always run
}
Und schließlich (haha) ist finalize im nicht ganz sicher, ob es sich um ein Schlüsselwort handelt, aber es gibt eine finalize () -Funktion in der Object-Klasse.
http://allu.wordpress.com/2006/11/08/difference-between-final-finally-and-finalize/
endgültige - konstante Erklärung.
finally - Der finally-Block wird immer ausgeführt, wenn der try-Block beendet wird, mit Ausnahme des Aufrufs System.exit (0). Dadurch wird sichergestellt, dass der finally-Block auch dann ausgeführt wird, wenn eine unerwartete Ausnahme auftritt. Aber schließlich ist es nicht nur für die Ausnahmebehandlung nützlich - es ermöglicht dem Programmierer zu vermeiden, dass der Bereinigungscode versehentlich durch eine Rückgabe umgangen, fortgesetzt oder unterbrochen wird. Das Einfügen von Bereinigungscode in einen finally-Block ist immer eine gute Vorgehensweise, auch wenn keine Ausnahmen zu erwarten sind.
finalize () - Methode hilft bei der Speicherbereinigung. Eine Methode, die aufgerufen wird, bevor ein Objekt vom Garbage Collector verworfen wird, damit es seinen Status bereinigen kann. Sollte nicht zum Freigeben von Nicht-Speicherressourcen wie Dateihandles, Sockets, Datenbankverbindungen usw. verwendet werden, da Java nur über eine begrenzte Anzahl dieser Ressourcen verfügt und Sie nicht wissen, wann die Garbage Collection aktiviert wird, um diese Nicht-Speicherressourcen freizugeben durch die finalize () Methode.
Haben Sie versucht, auf Google zu suchen, und benötigen eine Erläuterung?
final: final ist ein Schlüsselwort. Die als final deklarierte Variable sollte nur einmal initialisiert werden und kann nicht geändert werden. Als final deklarierte Java-Klassen können nicht erweitert werden. Als final deklarierte Methoden können nicht überschrieben werden.
endlich: endlich ist ein block. Der finally-Block wird immer ausgeführt, wenn der try-Block beendet wird. Dadurch wird sichergestellt, dass der finally-Block auch dann ausgeführt wird, wenn eine unerwartete Ausnahme auftritt. Aber schließlich ist es nicht nur für die Ausnahmebehandlung nützlich - es ermöglicht dem Programmierer zu vermeiden, dass der Bereinigungscode versehentlich durch eine Rückgabe umgangen, fortgesetzt oder unterbrochen wird. Das Einfügen von Bereinigungscode in einen finally-Block ist immer eine gute Vorgehensweise, auch wenn keine Ausnahmen zu erwarten sind.
finalize: finalize ist eine Methode. Bevor ein Objekt durch Müll gesammelt wird, ruft das Laufzeitsystem seine finalize () -Methode auf. Sie können den Freigabecode für Systemressourcen in die Methode finalize () schreiben, bevor Sie den Müll sammeln.
1. Final • Final wird verwendet, um Einschränkungen für Klasse, Methode und Variable anzuwenden. • Die endgültige Klasse kann nicht vererbt werden, die endgültige Methode kann nicht überschrieben werden und der endgültige Variablenwert kann nicht geändert werden. • Die endgültigen Variablen werden zum Zeitpunkt der Erstellung initialisiert, außer im Fall einer leeren endgültigen Variablen, die im Konstruktor initialisiert wird. • Final ist ein Schlüsselwort.
2. Schließlich • Wird schließlich für die Ausnahmebehandlung zusammen mit try and catch verwendet. • Es wird ausgeführt, ob eine Ausnahme behandelt wird oder nicht. • Dieser Block wird verwendet, um Ressourcen wie Datenbankverbindung und E / A-Ressourcen zu schließen. • Schließlich ist ein Block.
3. Finalisieren • Finalisieren wird vom Garbage Collection-Thread unmittelbar vor dem Sammeln berechtigter Objekte aufgerufen, um die Bereinigungsverarbeitung durchzuführen. • Dies ist die letzte Möglichkeit für das Objekt, eine Bereinigung durchzuführen. Da jedoch nicht garantiert werden kann, ob finalize () aufgerufen wird, ist es eine schlechte Praxis, die Ressource bis zum Abschluss des Aufrufs zu behalten. • Finalisieren ist eine Methode.
Die Bedeutung von final in Java ist: - Auf eine Variable angewendet bedeutet, dass die jeweilige Variable nach der Initialisierung nicht mehr geändert werden kann
private final double numer = 12;
Wenn Sie versuchen, diesen Wert zu ändern, wird eine Fehlermeldung angezeigt.
-auf eine Methode angewendet bedeutet, dass die jeweilige Methode nicht überschrieben werden kann
public final void displayMsg()
{
System.out.println("I'm in Base class - displayMsg()");
}
Die endgültige Methode kann jedoch vererbt werden, da das Schlüsselwort final die Neudefinition der Methode einschränkt.
- Auf eine Klasse angewendet bedeutet, dass die jeweilige Klasse nicht erweitert werden kann.
class Base
{
public void displayMsg()
{
System.out.println("I'm in Base class - displayMsg()");
}
}
Die Bedeutung von endlich ist:
class TestFinallyBlock{
public static void main(String args[]){
try{
int data=25/5;
System.out.println(data);
}
catch(NullPointerException e){System.out.println(e);}
finally{System.out.println("finally block is always executed");}
System.out.println("rest of the code...");
}
}
Selbst wenn in diesem Beispiel der Try-Catch ausgeführt wird oder nicht, wird immer ausgeführt, was sich in finally befindet. Die Bedeutung von finalize:
class FinalizeExample{
public void finalize(){System.out.println("finalize called");}
public static void main(String[] args){
FinalizeExample f1=new FinalizeExample();
FinalizeExample f2=new FinalizeExample();
f1=null;
f2=null;
System.gc();
}}
bevor Sie den Garbage Collector anrufen.