結(jié)論:
1、不管有沒有出現(xiàn)異常,finally塊中代碼都會執(zhí)行;
2、當(dāng)try和catch中有return時(shí),finally仍然會執(zhí)行;
3、finally是在return后面的表達(dá)式運(yùn)算后執(zhí)行的(此時(shí)并沒有返回運(yùn)算后的值,而是先把要返回的值保存起來,不管finally中的代碼怎么樣,返回的值都不會改變,任然是之前保存的值),所以函數(shù)返回值是在finally執(zhí)行前確定的;
4、finally中最好不要包含return,否則程序會提前退出,返回值不是try或catch中保存的返回值。
參考:https://www.cnblogs.com/fery/p/4709841.html
public static void main(String[] args) {
System.out.println(new testlist().test());;
System.out.println(x);;
}
static int test()
{
x = 1;
try
{
x++;
x = x/0; ---報(bào)錯(cuò)
return x;
} catch (Exception e) {
return x++;
}
finally
{
x++;
}
}
輸出結(jié)果:
2
4
去掉報(bào)錯(cuò)部分輸出結(jié)果是2,3
出現(xiàn)非Exception的錯(cuò)誤,如果finally有return返回值,則返回該值,沒有則報(bào)錯(cuò)
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>(1);
int i = change("1","2",list);
System.out.println(i);
System.out.println(list);
}
private static int change(String s1, String s2, List<Integer> list) {
try {
list.add(1);
int i = 1/0; ---報(bào)錯(cuò)部分
return 1;
} catch (Exception e){
list.add(2);
return 2;
} finally {
list.add(3);
return 3;
}
}
輸出結(jié)果:
3
[1, 2, 3]
去掉報(bào)錯(cuò)部分輸出結(jié)果是
3
[1, 3]
try {
// do something
System.exit(1);
} finally{
System.out.println(“Print from finally”);
}
不會執(zhí)行finally中的語句