黑马程序员技术交流社区

标题: 在finally子句中写入return语句引发的问题 [打印本页]

作者: 贾文泽    时间: 2013-1-24 13:08
标题: 在finally子句中写入return语句引发的问题
本帖最后由 张向辉 于 2013-1-25 09:36 编辑

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

作者: txl    时间: 2013-1-24 13:34
你把代码发上来看看,我在finally{} 中写return语句没有报异常啊
作者: 刘郑瑞    时间: 2013-1-24 13:37
我个人觉得不可能,一定是你finally{}代码块中的东西写错了。
作者: pzfpang449    时间: 2013-1-24 13:59
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-1-24 15:23
关于整个问题,其实就向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的值返回。。。。。




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