break-Anweisung in der finally-Klausel java

8
%Vor%

Im obigen Code ist die Ausgabe '2'. Was ich erwartete war, dass nichts gedruckt werden sollte. Was genau macht "Pause" hier? Bitte erkläre. Danke

    
Shwetanka 02.07.2011, 09:35
quelle

4 Antworten

10

Die finally -Klausel ändert den "Beendigungsgrund" für die try-Klausel. Eine detaillierte Erklärung finden Sie unter JLS 14.20.2 - Ausführung von try-catch-finally , mit Bezug auf JLS 14.1 Normal und abrupte Fertigstellung der Erklärungen .

Dies ist einer dieser merkwürdigen Randfälle in der Java-Sprache. Best Practice ist es nicht, den Kontrollfluss in einer finally -Klausel absichtlich zu ändern, da das Verhalten für den Leser schwierig zu verstehen ist.

Hier ist ein weiteres pathologisches Beispiel:

%Vor%     
Stephen C 02.07.2011, 09:38
quelle
4

Der Code in der finally-Klausel muss ausgeführt werden.

Hier ist der Ablauf:

Nachdem der Wert von i auf 1 in try-Block erhöht wurde, wird die return-Anweisung gefunden. Aber, hat es endlich auch blockiert . So führt es schließlich block und ihr erneut, es erhöht den Wert von i bis 2 . Dann ist der Einbruch aufgetreten und die Schleife ist beendet.

Also der Wert von i = 2 am Ende. Hoffe der Fluss ist klar.

    
Javascript is GOD 02.07.2011 09:38
quelle
4

Es unterbricht die Schleife und überschreibt die Rückkehr.

  1. finally Blöcke werden immer ausgeführt
  2. Was in finally passiert, kann überschreiben, was vorher passiert ist - ausgelöste Ausnahmen, return-Anweisungen.
Bozho 02.07.2011 09:37
quelle
0
%Vor%

Dies ist, was BlueJ Tracing zeigt.

    
Eng.Fouad 02.07.2011 09:42
quelle

Tags und Links