黑马程序员技术交流社区
标题:
关于finally与return的小问题
[打印本页]
作者:
shiweiCao
时间:
2013-5-16 22:03
标题:
关于finally与return的小问题
package cn.itcast;
public class FinallyDemo {
public static void main(String[] args) {
int result = fun();
System.out.println(result);
}
public static int fun(){
int i=1;
try {
i++;
// 执行i++后抛出异常
System.out.println(10/0);
} catch (Exception e) {
// 捕获异常后,输出i为2
System.out.println(i);
// 然后此处有return,本应该返回i并跳出方法了,但还有finally
return i;
}
// 那就先执行finally,i++ 然后输出i为3 最后再执行catch中的return 返回i为2; 所以最后的结果为 232,有换行的.
finally{
i++;
System.out.println(i);
}
// 这里的return无效,混淆视听的. 如果finally中有return的话 那就执行finally中的return 返回值为3, 不执行catch中的了
// 并且java中格式极严,finally中有return,此处的return还写的话直接就报错了
return i;
}
}
作者:
hou604720966
时间:
2013-5-16 22:25
向这个问题论坛已经很多了
这跟try、catch、finally、return的执行顺序有关,在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。在转去之前,try中先把要返回的结果存放到一个局部变量中去,执行完finally之后,再从中取出返回结果;因此,即使finally中对变量b进行了改变,但是不会影响返回结果。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2