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%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.
Tags und Links java break try-catch-finally