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

8voto

abhig Punkte 790

Ja, das wird es. Der einzige Fall, in dem dies nicht der Fall ist, ist, wenn die JVM beendet oder abstürzt.

8voto

Gautam Viradiya Punkte 487

Ja, finally block wird immer ausgeführt. Die meisten Entwickler verwenden diesen Block zum Schließen der Datenbankverbindung, des Resultset-Objekts, des Statement-Objekts und auch zum Rollback der Transaktion in Java Hibernate.

8voto

Utkarsh Bhatt Punkte 143

finally wird ausgeführt, das ist sicher.

finally wird in den folgenden Fällen nicht ausgeführt:

Fall 1 :

Bei der Ausführung von System.exit() .

Fall 2 :

Wenn Ihre JVM / Ihr Thread abstürzt.

Fall 3 :

Wenn Ihre Ausführung zwischendurch manuell gestoppt wird.

7voto

Scott Dorman Punkte 41206

Das ist eigentlich in jeder Sprache so... finally wird immer vor einer return-Anweisung ausgeführt, egal wo diese return im Methodenkörper steht. Wäre das nicht der Fall, hätte der finally-Block keine große Bedeutung.

7voto

milton Punkte 79

Ich war sehr verwirrt mit all den Antworten auf verschiedenen Foren und beschlossen, endlich Code und sehen. Die Ausgabe ist :

finally wird auch dann ausgeführt, wenn im try- und catch-Block ein Return erfolgt.

try {  
  System.out.println("try"); 
  return;
  //int  i =5/0;
  //System.exit(0 ) ;
} catch (Exception e) {   
  System.out.println("catch");
  return;
  //int  i =5/0;
  //System.exit(0 ) ;
} finally {  
   System.out.println("Print me FINALLY");
}

Ausgabe

Versuchen Sie

Drucken Sie mich ENDLICH

  1. Wenn die Rückgabe ersetzt wird durch System.exit(0) im Try- und Catch-Block im obigen Code und eine Ausnahme tritt davor auf, aus welchem Grund auch immer.

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