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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© heke 中级黑马   /  2013-10-29 12:31  /  1532 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 heke 于 2013-10-29 21:09 编辑

public class Test5 {
        public static void main(String[] args) {
                int a = 3;
                int b = test(a);
                System.out.println(b);

        }

        private static int test(int a) {
                int b = a;
                try {
                        return (b = b + 3);
                } catch (Exception e) {
                } finally {
                        b = b * 4;
                        System.out.println("finally:   " + b);
                }
                return b;
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

7 个回复

倒序浏览
虽然执行了finallly的语句,但是return返回结果仍为6
回复 使用道具 举报
因为调用test方法时,先执行try{}代码块,return(b=b+3)先执行,方法返回b值,此时相当方法已经调用结束,后面的return语句是执行不到的。finally是一定执行的方法调用后继续执行。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 回答简明扼要

查看全部评分

回复 使用道具 举报
本帖最后由 那得好好想想 于 2013-10-29 14:42 编辑

try中的return不是肯定返回的,因为如果有异常,就会捕获,然后执行finally,是这个顺序吧。
那么你finally中又没有return。所以在整个try块外面必须要有一个return,否则系统就会认为你没有返回值,这是一个因果关系,因为没有返回值,所以方法不成立。
那么此时外面这个return的值的作用就是告诉方法,try中我有一个返回结果是成立的,对应的就是第一个return,那么就返回第一个return的值。
再比如有一个空罐子,当方法执行return时,就把数据放到这个罐子里。
这个放的过程就是return,那么对比finally,它只是一个在try中必须要执行的代码块,并没有放入罐子的过程,所以罐子中的数据还是之前return的数据。
以上仅是我个人的理解。仅供参考。

评分

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

查看全部评分

回复 使用道具 举报
当执行int b=test(a)时,调用方法test,此时返回b=6,执行之后try catch语句结束,但finally一定是要执行的代码,finally的作用:1:finally中定义的通常是:关闭资源代码,因为资源必须释放
2:finally只有一种情况系不会运行。当执行到System.exie(0);finally不会被执行。希望能帮到你把

评分

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

查看全部评分

回复 使用道具 举报
重新了解一些语句,你就会明白,当执行到finally时,是强制执行里面的代码的。相当于结束

评分

参与人数 1黑马币 +3 收起 理由
黄炳期 + 3 淡定

查看全部评分

回复 使用道具 举报
如果问题已经解决,请及时修改主题至“提问结束”
回复 使用道具 举报
To 金牌黑马 2013-10-30 00:07:08
8#
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马