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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lucy198921 中级黑马   /  2013-3-31 22:02  /  2238 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 lucy198921 于 2013-4-1 20:42 编辑


public class Test {

        private  int x = 2;
        public static void main(String[] args) {
                Test t = new Test();
                t.test();
                System.out.println("-----------heima------------"+t.x);

        }
        public  int test(){

                try {
                        ++x;
                        System.out.println("-----------try------------"+x);
                        return x;
                } catch (Exception e) {
                        throw new RuntimeException();
                } finally{                        
                        x++;
                        System.out.println("-----------finally------------"+x);
                }        

        }
}




结果是:
-----------try------------3
-----------finally------------4
-----------heima------------4

return语句是立刻返回调用者处,
在以上代码执行try代码块时,遇到return语句时,
应该立刻返回到main函数,此时返回x的值应该是3,为
什么打印结果显示finall在return前执行,返回到main函数x的值为4?


评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

8 个回复

倒序浏览
finally块中是一定会执行的代码,当java程序运行到return是会先判断是否有finally语句,如果有就执行finally块中的语句,如果没有则直接返回

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
finally块就是在方法返回前执行的,因为是一定要执行的语句,因此return语句执行前就会先执行。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
在return x之后并不会执行main里的打印语句,而是先去执行finally里的代码,因为这个是必须执行的,如果先执行main函数里的打印语句就说明这段程序已经执行完了,这样不合规则,所以线执行finally里的代码,在执行main函数里的最后一句打印语句。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
fially只有一种一情况不会执行到就是当抛到system.exit(0);的时候,finally里的代码不会执行。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
finally里的代码块中是一定会执行的代码,除非关闭虚拟机,即system.exit(0);还有就是它会在return,前执行其不会改变返回值。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 夏凡 于 2013-4-1 11:50 编辑
  1. public  int test(){

  2.                  try {
  3.                          ++x;
  4.                          System.out.println("-----------try------------"+x);
  5.                          return x;
  6.                  }
  7.                  catch (Exception e) {
  8.                          throw new RuntimeException();
  9.                  }
  10.                  finally{                        
  11.                          x++;
  12.                          System.out.println("-----------finally------------"+x);
  13.                  }  
复制代码
这段代码执行的顺序是:
case1:有finally语句,必然执行!而且是在return语句之前
case2:无finally语句,遇到return语句结束并返回结果

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
若还有问题,继续追问;没有的话,将帖子分类改成【已解决】哦~
回复 使用道具 举报
搞定了.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马