java中finally和return的执行顺序

注意:return的位置。。。

从这几个例子中可以看到,如果try之前没有有条件的return,则try..catch..finally语句块中的语句都是顺序执行(如果try中或者catch中
有return语句,那么先执行该return,然后执行finally, 如果finally中也有return, 该出的返回值会覆盖掉try 和 catch中的return值;
如果try..catch..finally语句块之后有return语句, try中、catch中、finally中都没有 (有条件的return 语句)先按顺序执行到finally,
最后return, 如果在try中或者catch中有 (有条件的return)那么先执行该return, 然后执行finally),否则即在进入try语句块之前返回就不会执行try语句




//finaly 先执行, return 后执行
public      class      Test{   
   public      static      void      main(String[]      args){   
     System.out.print(tt());   
   }   
   public      static      int      tt(){   
     int      b      =      23;   
     try{   
      System.out.println("yes");   
  
     }catch(Exception      e){   
       System.out.println("error      :      "      +      e);   
     }finally {   
       if(b>25){   
         System.out.println("b>25      :      "+b);   
        }   
        System.out.println("finally");   

      }
     return  b+=88;        
   }
}


//先执行第一个return, 然后执行finally

public      class      Test{   
   public      static      void      main(String[]      args){   
     System.out.print(tt());   
   }   
   public      static      int      tt(){   
     int      b      =      23;   
     try{   
      System.out.println("yes");   
      return      b;   
     }catch(Exception      e){   
       System.out.println("error      :      "      +      e);   
     }finally {   
       if(b>25){   
         System.out.println("b>25      :      "+b);   
        }   
        System.out.println("finally");   
        return b+88;
      }
     
   }
}

//在try中增加一个有条件的异常抛出,然后其中的return语句被忽略
public      class      Test{   
   public      static      void      main(String[]      args){   
     System.out.print(tt());   
   }   
   public      static      int      tt(){   
     int      b      =      23;   
     try{   
      System.out.println("yes"); 
      if(b==23)  
         throw new Exception();
      return b+=123;
     }catch(Exception      e){   
       System.out.println("error      :      "      +      e);   
     }finally {   
       if(b>25){   
         System.out.println("b>25      :      "+b);   
        }   
        System.out.println("finally");   

      }
     return  b+=88;        
   }
}

//finally中的返回值将覆盖try中的return返回值
public      class      Test{   
   public      static      void      main(String[]      args){   
     System.out.print(tt());   
   }   
   public      static      int      tt(){   
     int      b      =      23;   
     try{   
      System.out.println("yes");   
      return b;
     }catch(Exception      e){   
       System.out.println("error      :      "      +      e);   
     }finally {   
       if(b>25){   
         System.out.println("b>25      :      "+b);   
        }   
        System.out.println("finally");   
        return  b+=88;
      }            
   }
}

//cathch中的return 也会被finally中的return覆盖
public      class      Test{   
   public      static      void      main(String[]      args){   
     System.out.print(tt());   
   }   
   public      static      int      tt(){   
     int      b      =      23;   
     try{   
      System.out.println("yes");   
      throw new Exception();
     }catch(Exception      e){   
       System.out.println("error      :      "      +      e);   
       return b;
     }finally {   
       if(b>25){   
         System.out.println("b>25      :      "+b);   
        }   
        System.out.println("finally");   
        return  b+=88;
      }           
   }
}


//直接返回,下面不再执行try..catch...finally语句块
public      class      Test{   
   public      static      void      main(String[]      args){   
     System.out.print(tt());   
   }   
   public      static      int      tt(){   
     int      b      =      23;   
     if(b==23) return b;
     try{   
      System.out.println("yes");   
      throw new Exception();
     }catch(Exception      e){   
       System.out.println("error      :      "      +      e);   
       return b;
     }finally {   
       if(b>25){   
         System.out.println("b>25      :      "+b);   
        }   
        System.out.println("finally");   
        return  b+=88;
      }            
   }
}









本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/3817352.html,如需转载请自行联系原作者
上一篇:Photoshop绘制卡通魔兽人物


下一篇:java://Comparator、Comparable的用法(按照要求将map集合的键值对进行顺序输出)