黑马程序员技术交流社区

标题: 关于处理异常的一个问题 [打印本页]

作者: 流水0215    时间: 2015-5-21 10:10
标题: 关于处理异常的一个问题
public static int  show(){
                int x = 1;
                try
                {
                        x=2;
                        return x;
                }
                catch (Exception e)
                {
                        return 1;
                }finally{
                        x=3;
                }
        }
为什么调用这个方法的时候,x的值是2呢?
作者: 谷歌    时间: 2015-5-21 10:47
1.无论try里面有没有return语句,finally语句一定都会执行
2.如果finally中没有return语句,try里面有return,那么在执行try中的return语句之前会先去执行finally中的代码,再去执行try中的return语句;如果在finally中也包含return语句,将会直接返回,不再去执行try中的return语句。
作者: 冷雨敲窗被未温    时间: 2015-5-21 11:43
进来水一下!
作者: 流水0215    时间: 2015-5-21 17:17
谷歌 发表于 2015-5-21 10:47
1.无论try里面有没有return语句,finally语句一定都会执行
2.如果finally中没有return语句,try里面有retur ...

嗯,谢谢了
作者: 狙神自傲    时间: 2015-5-21 17:27
谷歌 发表于 2015-5-21 10:47
1.无论try里面有没有return语句,finally语句一定都会执行
2.如果finally中没有return语句,try里面有retur ...

那为什么X是2
作者: 谷歌    时间: 2015-5-21 18:09
狙神自傲 发表于 2015-5-21 17:27
那为什么X是2

先变3,再变2
作者: 嘎嘎鸭子    时间: 2015-5-21 18:20
他还没装到池中,就被return了
作者: xcj199106    时间: 2015-5-21 21:17
楼主给力,非常感谢
作者: 流水0215    时间: 2015-5-21 22:57
xcj199106 发表于 2015-5-21 21:17
楼主给力,非常感谢

楼主很水的,不用客气
作者: 狙神自傲    时间: 2015-5-22 08:44
嘎嘎鸭子 发表于 2015-5-21 18:20
他还没装到池中,就被return了

我觉得是先变2return了在变的3  你觉得呢
作者: guojiadui    时间: 2015-5-22 09:07
长见识了
作者: guojiadui    时间: 2015-5-22 09:12
你的方法怎么运行不可的?
作者: 彭越    时间: 2015-5-22 09:35
piaoguollll
作者: hellotaomi    时间: 2015-5-22 09:36
谷歌 发表于 2015-5-21 18:09
先变3,再变2

按你的说法不是先运行try内的X=2;再运行finally中的X=3;再去运行try中的return吗,那不是应该是3吗,有点混乱啦
作者: lizhi    时间: 2015-5-22 11:55
受益了,以后就不会出错了
作者: 谷歌    时间: 2015-5-22 15:48
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
作者: tougboy    时间: 2015-5-22 16:52
还没等finally 他已经return了   
作者: Huylens    时间: 2015-5-22 16:56
因为return x返回值来,函数结束了。
作者: 大西洋    时间: 2015-5-22 17:14
谷歌 发表于 2015-5-21 10:47
1.无论try里面有没有return语句,finally语句一定都会执行
2.如果finally中没有return语句,try里面有retur ...

学习! 感谢分享!




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