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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 流水0215 中级黑马   /  2015-5-21 10:10  /  748 人查看  /  18 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static int  show(){
                int x = 1;
                try
                {
                        x=2;
                        return x;
                }
                catch (Exception e)
                {
                        return 1;
                }finally{
                        x=3;
                }
        }
为什么调用这个方法的时候,x的值是2呢?

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

18 个回复

倒序浏览
1.无论try里面有没有return语句,finally语句一定都会执行
2.如果finally中没有return语句,try里面有return,那么在执行try中的return语句之前会先去执行finally中的代码,再去执行try中的return语句;如果在finally中也包含return语句,将会直接返回,不再去执行try中的return语句。
回复 使用道具 举报 2 0
进来水一下!
回复 使用道具 举报
谷歌 发表于 2015-5-21 10:47
1.无论try里面有没有return语句,finally语句一定都会执行
2.如果finally中没有return语句,try里面有retur ...

嗯,谢谢了
回复 使用道具 举报
谷歌 发表于 2015-5-21 10:47
1.无论try里面有没有return语句,finally语句一定都会执行
2.如果finally中没有return语句,try里面有retur ...

那为什么X是2
回复 使用道具 举报

先变3,再变2
回复 使用道具 举报
嘎嘎鸭子 来自手机 中级黑马 2015-5-21 18:20:17
7#
他还没装到池中,就被return了
回复 使用道具 举报
楼主给力,非常感谢
回复 使用道具 举报
xcj199106 发表于 2015-5-21 21:17
楼主给力,非常感谢

楼主很水的,不用客气
回复 使用道具 举报
嘎嘎鸭子 发表于 2015-5-21 18:20
他还没装到池中,就被return了

我觉得是先变2return了在变的3  你觉得呢
回复 使用道具 举报
长见识了
回复 使用道具 举报
你的方法怎么运行不可的?
回复 使用道具 举报
piaoguollll
回复 使用道具 举报

按你的说法不是先运行try内的X=2;再运行finally中的X=3;再去运行try中的return吗,那不是应该是3吗,有点混乱啦
回复 使用道具 举报
lizhi 来自手机 中级黑马 2015-5-22 11:55:48
15#
受益了,以后就不会出错了
回复 使用道具 举报
hellotaomi 发表于 2015-5-22 09:36
按你的说法不是先运行try内的X=2;再运行finally中的X=3;再去运行try中的return吗,那不是应该是3吗,有 ...

你可以看一下这个帖子。我认为是比较合理的解释。但是它内部具体是怎么运作的,估计得研究JVM了。
http://www.cnblogs.com/hongten/archive/2013/12/10/hongten_java_finally.html
回复 使用道具 举报
还没等finally 他已经return了   
回复 使用道具 举报
因为return x返回值来,函数结束了。
回复 使用道具 举报
谷歌 发表于 2015-5-21 10:47
1.无论try里面有没有return语句,finally语句一定都会执行
2.如果finally中没有return语句,try里面有retur ...

学习! 感谢分享!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马