黑马程序员技术交流社区

标题: 关于先后执行顺序的问题 [打印本页]

作者: lucy198921    时间: 2013-3-31 22:02
标题: 关于先后执行顺序的问题
本帖最后由 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?



作者: 刘松老师    时间: 2013-3-31 22:13
finally块中是一定会执行的代码,当java程序运行到return是会先判断是否有finally语句,如果有就执行finally块中的语句,如果没有则直接返回
作者: 黑马李超    时间: 2013-3-31 22:13
finally块就是在方法返回前执行的,因为是一定要执行的语句,因此return语句执行前就会先执行。
作者: 赵海洋    时间: 2013-3-31 23:31
在return x之后并不会执行main里的打印语句,而是先去执行finally里的代码,因为这个是必须执行的,如果先执行main函数里的打印语句就说明这段程序已经执行完了,这样不合规则,所以线执行finally里的代码,在执行main函数里的最后一句打印语句。
作者: 刘策    时间: 2013-4-1 07:37
fially只有一种一情况不会执行到就是当抛到system.exit(0);的时候,finally里的代码不会执行。
作者: 杜加璇    时间: 2013-4-1 09:04
finally里的代码块中是一定会执行的代码,除非关闭虚拟机,即system.exit(0);还有就是它会在return,前执行其不会改变返回值。
作者: 夏凡    时间: 2013-4-1 11:49
本帖最后由 夏凡 于 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语句结束并返回结果

作者: 陈丽莉    时间: 2013-4-1 18:39
若还有问题,继续追问;没有的话,将帖子分类改成【已解决】哦~
作者: lucy198921    时间: 2013-4-1 20:41
搞定了.




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