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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 姚宏 中级黑马   /  2013-11-23 11:39  /  1089 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


       是这样的,依照我的理解,test1中try代码块执行了func1有了返回值n,那么这个返回值就已经放入栈中存起来,finally代码块中对n的操作(fun3)不会影响到栈中存储结果了。
       可是在test2中try代码块执行了func1有了返回值n,finally代码块也出现了返回值n+1,最终必须执行finally代码,结果是返回n+1,那个我的问题就是两个return值是否都存入栈中了?还是第二return值覆盖了第一个呢?
      不知道是不是我理解有误,请给予指点
      物联网 第七期 有没有qq交流群

复制代码
运行结果是
func1
func3
1
func1
func2
2

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
这个是代码
public class ExceptionRe {
        public  static int func1(int n)
        {System.out.println("func1");
                return n;
        }
        public static int func2(int n)
        {
                 System.out.println("func2");
                 return n+1;
        }
        public static void  func3(int n)
                {
                         System.out.println("func3");
                         ++n;
                       
                }
        public static int test1(int n)//test1
                {
                        try{
                                return func1(n);
                        }
                        finally{
                                func3(n);
                        }
                }

        public static int test2(int n)//test2
        {
                try{
                        return func1(n);
                }
                finally
                {
                         return func2(n);
                }
        }

        public static void main(String[] args) throws Exception {
                // TODO Auto-generated method stub
            int n=1;
                System.out.println(test1(n));
                System.out.println(test2(n));
                 
               
        }

}
回复 使用道具 举报
当然是覆盖操作了。虽然func1()方法返回了1,但是finally中的代码一定会被执行啊,又不是System.exit(0);没有让程序退出,当然会执行。那么func2()方法返回了2,并把之前的结果覆盖了。

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 神马都是浮云

查看全部评分

回复 使用道具 举报
中关村阿旺 发表于 2013-11-23 21:24
当然是覆盖操作了。虽然func1()方法返回了1,但是finally中的代码一定会被执行啊,又不是System.exit(0); ...

ok 谢谢你了   等了半天不容易啊   虽然我自己也这样认为但不敢确定 现在好了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马