黑马程序员技术交流社区
标题:
在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