A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 庞在飞 于 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,返回。
希望对大家的理解有所帮助

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

2 个回复

倒序浏览
我想是这样的:当程序执行到try里面的return语句时,转去执行finall里面的语句,然再返回执行try里面的return语句:可以在try语句中插入一些其它信息来测试一下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马