2697 Stimmen

Wird ein finally-Block in Java immer ausgeführt?

Bei diesem Code kann ich sicher sein, dass der finally-Block immer ausgeführt wird, egal was something() ist?

try {  
    something();  
    return success;  
}  
catch (Exception e) {   
    return failure;  
}  
finally {  
    System.out.println("Ich weiß nicht, ob das ausgegeben wird");
}

672 Stimmen

Wenn dies nicht der Fall ist, sollte das Schlüsselwort wie folgt lauten probably stattdessen.

61 Stimmen

3 Stimmen

Effektives Java sagt etwas anderes informit.com/articles/article.aspx?p=1216151&seqNum=7

6voto

try - catch - finally sind die Schlüsselwörter für die Verwendung von Ausnahmebehandlungsfällen.
Als normaler Erklärungsansatz

try {
     //code statements
     //exception thrown here
     //lines not reached if exception thrown
} catch (Exception e) {
    //lines reached only when exception is thrown
} finally {
    // always executed when the try block is exited
    //independent of an exception thrown or not
}

Der finally-Block verhindert die Ausführung von...

  • Als Sie anriefen System.exit(0);
  • Wenn die JVM beendet wird.
  • Fehler in der JVM

5voto

Danail Tsvetanov Punkte 433

Ja, so steht es geschrieben ici

Wenn die JVM beendet wird, während der try- oder catch-Code ausgeführt wird, wird der finally-Block möglicherweise nicht ausgeführt. Wenn der Thread, der den Try- oder Catch-Code ausführt, unterbrochen oder beendet wird, kann der Finally-Block ebenfalls nicht ausgeführt werden, auch wenn die Anwendung als Ganzes weiterläuft.

3 Stimmen

Wenn Sie ja sagen, meinen Sie also nein?

5voto

Sandip Solanki Punkte 684

Der finally-Block wird in einigen wenigen Fällen nach der Rückkehr nicht aufgerufen: wenn System.exit() zuerst aufgerufen wird oder wenn die JVM abstürzt.

Lassen Sie mich versuchen, Ihre Frage auf möglichst einfache Weise zu beantworten.

Regel 1 : Der finally-Block wird immer ausgeführt (Es gibt zwar Ausnahmen, aber halten wir uns erst einmal daran).

Regel 2 Die Übergabe der Kontrolle kann als Ergebnis der normalen Ausführung, der Ausführung einer break-, continue-, goto- oder return-Anweisung oder der Auslösung einer Ausnahme erfolgen.

Im Falle einer Return-Anweisung muss die Kontrolle die aufrufende Methode verlassen und ruft daher den finally-Block der entsprechenden try-finally-Struktur auf. Die return-Anweisung wird nach dem finally-Block ausgeführt.

Falls es im finally-Block auch eine return-Anweisung gibt, wird diese definitiv die im try-Block anstehende Anweisung überschreiben, da sie den Aufrufstapel löscht.

Eine bessere Erklärung finden Sie hier: http://msdn.microsoft.com/en-us/ .... ist das Konzept in allen Hochsprachen weitgehend gleich.

4voto

Rohit Chugh Punkte 109

Schließlich Block immer ausführen, ob Ausnahme-Handle oder nicht. wenn eine Ausnahme aufgetreten ist, bevor versuchen Block dann schließlich Block wird nicht ausgeführt.

4voto

eric2323223 Punkte 3460

Probieren Sie diesen Code aus, und Sie werden verstehen, wie Der Code im finally-Block wird nach der return-Anweisung ausgeführt. .

public class TestTryCatchFinally {
    static int x = 0;

    public static void main(String[] args){
        System.out.println(f1() );
        System.out.println(f2() );
    }

    public static int f1(){
        try{
            x = 1;
            return x;
        }finally{
            x = 2;
        }
    }

    public static int f2(){
        return x;
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X