try catch finally return的执行顺序与返回值探究

 下午看了一下百度文库中下载下来的java笔试题,其中一道就是关于这个问题的,所以写了个测试程序验证了一下,另外具体的理论知识搜罗了网上的资料。

  测试程序如下:

  package com.andy.code;

public class TestFinally {
 
 
 public static int gett(){
  int t = 1;
  try{
   System.out.println("before throw");
   throw new Exception();
   
   // System.out.println("before return");
   //return ++t;
  }catch(Exception e){
   t++;
   return ++t;
  }finally{
   t+=100;
   System.out.println("finaly");
  // return t;
  }
 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
     System.out.println(gett());
 }

}

异常处理的流程:先执行try块里的代码,如果抛出了异常,则转到相应的catch块里执行,在catchreturn之前执行finally块,反之,如果没有异常,则在try块return之前执行finally语句。

实验出来的结果分两种情况:

1.try 或catch块里含有return语句而finally没有return语句:

   这种情况程序执行到try或catch块中的return语句时,将要return的结果计算出来保存等着方法结束时返回,然后接着执行finally里的代码,即使里面有改变了某些变量的值,也不会影响最后的返回值。

2.try 或catch 与finally里同时有return语句,同样在try或catch的return之前保存结果等待返回,接着执行finally代码,但是finally的return语句将会执行,就是说它屏蔽掉了try catch里的return,最后返回的值是finally return的结果。

posted @ 2011-10-07 19:48  AndyLau2  阅读(472)  评论(0编辑  收藏  举报