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;
      }            
   }
}

目录
相关文章
|
17天前
|
Java API
【JAVA】final、finally、finalize 有什么区别?
【JAVA】final、finally、finalize 有什么区别?
|
Java 编译器
Java 最常见的面试题:try-catch-finally 中哪个部分可以省略?
Java 最常见的面试题:try-catch-finally 中哪个部分可以省略?
Java 最常见的面试题:try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
Java 最常见的面试题:try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
|
Java
106.Java 中的 finally 一定会执行吗
106.Java 中的 finally 一定会执行吗
65 0
|
SQL 数据采集 数据库连接
java127-finally语句
java127-finally语句
87 0
|
Java 编译器
Java - try、catch、finally(包含 return)
Java - try、catch、finally(包含 return)
178 0
|
Java
final,finally,finaliz的区别(Java)
final,finally,finaliz的区别(Java)
137 0
|
安全 Java
Java 的 finally 代码块的代码一定会执行吗?
Java 的 finally 代码块的代码一定会执行吗?
235 0
|
Java 存储
【Java疑难杂症】有return的情况下try catch finally的执行顺序
  有这样一个问题,异常处理大家应该都不陌生,类似如下代码: 1 public class Test { 2 public static void main(String[] args) { 3 int d1 = 0; 4 int d2 =...
903 0