Java中異常捕獲機制try...catch...finally塊中的finally語句是不是一定會被執行?
try...catch...finally中分別執行順序呢?
public int test() {
int a = 10;
try {
System.out.println("try......");
return a += 10;
} catch (Exception e) {
System.out.println("catch......");
} finally {
System.out.println("finally......");
if (a > 10) {
System.out.println("finally......a = " + a);
}
}
return 20;
}
try......
finally......
finally......a = 20
可以看出,先執行try中,return中的語句執行完後再去執行finally語句,finally中執行完後再返回try中的結果。
如果finally中也有return呢,最終會停在哪個裏面的return?
@Test
public void addition_isCorrect() {
System.out.println(test());
}
public int test() {
int a = 10;
try {
System.out.println("try......");
return a += 10;
} catch (Exception e) {
System.out.println("catch......");
} finally {
System.out.println("finally......");
if (a > 10) {
System.out.println("finally......a = " + a);
}
return a += 20;
}
}
try......
finally......
finally......a = 20
40
先執行try語句,包括try中return中部分,但是不返回,繼續執行finally語句,最終停留在finally中的return
如果finally中沒有return,但是我更改了數據,最終返回的結果會是什麼呢?
@Test
public void addition_isCorrect() {
System.out.println(test());
}
public int test() {
int a = 10;
try {
System.out.println("try......");
return a += 10;
} catch (Exception e) {
System.out.println("catch......");
} finally {
System.out.println("finally......");
if (a > 10) {
System.out.println("finally......a = " + a);
}
a = 30;
}
return a += 20;
}
打印------------------------
try......
finally......
finally......a = 20
20