Es gibt mindestens zwei Situationen, in denen die final-Anweisung nicht ausgeführt wird:
(1) Die try-Anweisung wird nicht ausgeführt. Wenn return vor der try-Anweisung zurückgegeben wird, wird die final-Anweisung nicht ausgeführt. Dies zeigt auch, dass die notwendige, aber nicht hinreichende Bedingung für die Ausführung der final-Anweisung ist: Die entsprechende try-Anweisung muss ausgeführt werden.
(2) Es gibt eine Anweisung wie System.exit(0); im try-Block|catch-Block. System.exit(0) beendet die JVM der Java Virtual Machine und alles ist beendet. Natürlich wird die finale Anweisung nicht ausgeführt.
Wenn in try-catch-finally return auf „final“ stößt, ist return für „finally“ ungültig, das heißt:
1. Wenn „return“ im Try-Catch-Block erfolgt, wird „finally“ ebenfalls ausgeführt.
2. Die Return-Anweisung in „finally“ überschreibt die Wirkung der Return-Anweisung im Try-Catch-Block.
Fazit: Die Return-Anweisung ist nicht unbedingt der Ausgang der Funktion. Wenn die Rückgabe ausgeführt wird, wird der Wert nach der Rückgabe einfach in die Rückgabewertvariable kopiert.
class Exc{ int a; int b; } public class Except { @SuppressWarnings("finally") static int compute (){ Exc e = new Exc(); e.a = 10; e.b = 10; int res = 0 ; try{ res = e.a / e.b; System.out.println("try ……"); return res + 1; }catch(NullPointerException e1){ System.out.println("NullPointerException occured"); }catch(ArithmeticException e1){ System.out.println("ArithmeticException occured"); }catch(Exception e3){ System.out.println("Exception occured"); }finally{ System.out.println("finnaly occured"); } System.out.println(res); return res+3; } public static void main(String[] args){ int b = compute(); System.out.println("mian b= "+b); } }
Ausgabe:
try …… finnaly occured mian b= 2
Fazit: Wenn keine Ausnahme vorliegt, führen Sie den Codeblock in try bis aus Die Rückgabe in try führt dann den Codeblock in „finally“ aus, um zu versuchen, „return“ auszuführen. Exit-Funktion.
class Exc{ int a; int b; } public class Except { @SuppressWarnings("finally") static int compute (){ Exc e = new Exc(); // e.a = 10; // e.b = 10; int res = 0 ; try{ res = e.a / e.b; System.out.println("try ……"); return res + 1; }catch(NullPointerException e1){ System.out.println("NullPointerException occured"); }catch(ArithmeticException e1){ System.out.println("ArithmeticException occured"); }catch(Exception e3){ System.out.println("Exception occured"); }finally{ System.out.println("finnaly occured"); } System.out.println(res); return res+3; } public static void main(String[] args){ int b = compute(); System.out.println("mian b= "+b); } }
Ausgabe:
ArithmeticException occured finnaly occured 0 mian b= 3
Schlussfolgerung: Wenn in try eine Ausnahme auftritt, springen Sie bei der Ausnahmeanweisung zum Ausnahmecodeblock, der von erfasst wird Catch: Führen Sie nach der Ausführung von „catch“ „finally“ aus, springen Sie aus „try{}catch{}finally{}“ und fahren Sie mit der Ausführung abwärts fort. Die nachfolgenden Anweisungen in „try“ werden nicht ausgeführt.
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung von Beispielen der „finally“-Anweisung in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!