黑马程序员技术交流社区

标题: 在finally子句中写入return语句?一些情况问题 [打印本页]

作者: pzfpang449    时间: 2013-2-8 17:37
标题: 在finally子句中写入return语句?一些情况问题
本帖最后由 庞在飞 于 2013-2-8 17:38 编辑

问题:
在 try{}catch(){} finally{}  语句中
finally子句提供了一种不管有无异常都必须执行的机制,但是如果在finally{} 中写return语句的话,出现try...catch块中抛出的异常不能正常的传递给上层调用者,,,这是怎么个情况?

解答:
其实就是try块中有return,finally语句块中也有return
看代码:
public class Demo{
public static void main(String args[]){
int num = 10;
System.out.println(test(num));
}
public static int test(int b){
try{
b += 10;
return b;
}catch(RuntimeException e){
}catch(Exception e2){
}finally{
b += 10;
return b;
}
}
}
结果是:
E:\java Demo>java Demo
30
说明:结果为30,所以此段代码依然是先执行try块中的return语句,并将20


缓存起来,接着跳转到finally语句块执行,但是由于finally语句块中有return语句,所以程序在此处结束,并不返回到try块中返回结


果,而是直接将finally块中新修改的值即30,返回。
希望对大家的理解有所帮助
作者: 谢洋    时间: 2013-2-10 13:59
我想是这样的:当程序执行到try里面的return语句时,转去执行finall里面的语句,然再返回执行try里面的return语句:可以在try语句中插入一些其它信息来测试一下。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2