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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张向辉 于 2013-1-25 09:36 编辑

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

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9 赞一个!

查看全部评分

4 个回复

倒序浏览
你把代码发上来看看,我在finally{} 中写return语句没有报异常啊
回复 使用道具 举报
我个人觉得不可能,一定是你finally{}代码块中的东西写错了。
回复 使用道具 举报
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 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

回复 使用道具 举报
关于整个问题,其实就向3楼同学说的那样,其实你理解了try{}catch(){} finally{}  是怎么执行的就知道怎么回事了
3楼的事例多加个数进去就看的更清楚一点:
public class Demo{
        public static void main(String args[]){
               
                System.out.println(test(10,2));
        }
        public static int test(int b,int c){
                try{
                        b += 10;
                        return b+c;
               
                }catch(Exception e2){
                }finally{
                        b += 10;
                        c+=b;
                        return b;
                }
        }
}

结果:30
问题在于,代码是先执行try{}中的语句当下面有finally{}语句时,try中的return必不会马上返回,而是放在一边继续finally{}语句,如果finally{}中有return  程序会吧finally{}中return的值返回。。。。。

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马