之前在看一道题目时忽略了finally和return的执行关系,稀里糊涂得做错了。
后来百度了一下,现在通过代码来理解finally和return。
/*
finally和return
1.不管有无异常,不管try或catch中是否有return,finally块终将执行
2.在执行finally之前会先将try和catch中return的表达式运算,然后保存起来,再去执行finally中的语句。
3.如果finally中没有return 则返回try和catch中的return语句;如果finally中有return,则返回finally中的return语句
*/
public class FinallyAndReturn {
public static void main(String[] args){
int i = finallyTest();
System.out.println(i); // 输出1
int j = finallyTest2();
System.out.println(j); // 输出1
}
public static int finallyTest(){
int i;
try{
i = 1;
return i;
}catch(Exception e){
i = 2;
return i;
}finally{
i = 3;
System.out.println(i); // 输出3
// return i;
}
}
public static int finallyTest2(){
int i = 0;
try{
return ++i;
}catch(Exception e){
i = 2;
return i;
}finally{
i++;
System.out.println(i); // 输出2
// return i;
}
}
}