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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 沈子豪 中级黑马   /  2013-3-18 20:50  /  1997 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package test;

public class Test {
public static void main(String[] args) {
        System.out.println(getNumber());
}
public static int getNumber()
{
        //定义成员变量
        int x=10;
        //抛异常
        try{
                System.out.println(10/0);
                        }
        catch(Exception e)
        {
                x=20;
                return x;
        }
        finally
        {
        x=30;
        System.out.println("hello");
        }
        return 0;
}
}
//输出的结果是hello 20,为什么是20?具体的运行过程是怎么样的?求解

点评

如果你的问题得到解决,请及时将主题改为[已解决],如果还有问题请继续追问,谢谢  发表于 2013-3-18 21:04

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

8 个回复

倒序浏览
经过测试
1、执行 try   必须的,顺序执行
2、catch    顺序执行  但不返回值 应该是将返回值保存内存中
3、执行finally  必须执行语句
4、这个时候执行return 语句  

注意 finally 不能改变 return 的数据
回复 使用道具 举报
try{}catch(){}finally{}运行中,如果catch(Exception e){x=20;return x;}方法,在finally前执行了return,finally会先被执行,所有会输出hello 20,但有一种情况
不会被执行,就是System.exit(0);这种情况相当于直接关闭虚拟机了
回复 使用道具 举报
丁一 发表于 2013-3-18 20:54
经过测试
1、执行 try   必须的,顺序执行
2、catch    顺序执行  但不返回值 应该是将返回值保存内存中

何以见得?如果finally中也有个return呢?是不是能改变最后的返回值????
回复 使用道具 举报
贾文泽 发表于 2013-3-18 21:02
何以见得?如果finally中也有个return呢?是不是能改变最后的返回值???? ...

如果return 返回就不返回上面的值了
回复 使用道具 举报
丁一 发表于 2013-3-18 21:06
如果return 返回就不返回上面的值了

如果try中有return语句,程序是吧要return的值暂时缓存起来,等待finally执行完毕之后再返回,
但是,如果finally中要是也有return语句,就会覆盖原来缓存的值,运行结束后就返回的事finally中返回的值
回复 使用道具 举报
丁一 中级黑马 2013-3-18 21:31:10
7#
贾文泽 发表于 2013-3-18 21:13
如果try中有return语句,程序是吧要return的值暂时缓存起来,等待finally执行完毕之后再返回,
但是,如 ...

是覆盖的还是直接返回的没办法确定吧,有没有东西能直接查看内存,看那个时间段内存中有两个对象还是一个对象
回复 使用道具 举报
丁一 发表于 2013-3-18 21:31
是覆盖的还是直接返回的没办法确定吧,有没有东西能直接查看内存,看那个时间段内存中有两个对象还是一个 ...

忘了什么时候在哪本书上看过是覆盖。。。。
回复 使用道具 举报
丁一 中级黑马 2013-3-24 14:22:15
9#
贾文泽 发表于 2013-3-18 22:15
忘了什么时候在哪本书上看过是覆盖。。。。

是覆盖!

《Java核心技术》卷1,是这样说的:当finally字句包含return语句时,将会出现一些意想不到的结果。假设利用return语句从try语句块中退出,在方法返回前,finally子句的内容将被执行。如果finally子句中也有一个return语句,这个返回值将会覆盖原始的返回值。p480

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1 正解!

查看全部评分

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