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

目录
相关文章
|
5天前
|
存储 Java
[Java]面试官:你对异常处理了解多少,例如,finally中可以有return吗?
本文介绍了Java中`try...catch...finally`语句的使用细节及返回值问题,并探讨了JDK1.7引入的`try...with...resources`新特性,强调了异常处理机制及资源自动关闭的优势。
14 1
|
2月前
|
Java 程序员 开发者
Java中的异常处理:深入理解try-catch-finally语句
【9月更文挑战第18天】在Java编程中,异常处理是确保程序健壮性和可靠性的关键组成部分。本文将深入探讨Java的异常处理机制,特别是try-catch-finally语句的使用和重要性。通过实际代码示例,我们将展示如何捕获和处理异常,以及如何在finally块中执行必要的清理操作。无论你是初学者还是有经验的开发者,这篇文章都将帮助你更好地理解和应用Java的异常处理。
34 6
|
3月前
|
Java 开发者 UED
Java中的异常处理:理解try-catch-finally语句
【8月更文挑战第31天】 在Java编程中,异常处理是确保程序健壮性和稳定性的重要方面。本文将介绍Java中的异常处理机制,重点讲解如何使用try-catch-finally语句来捕获和处理异常。通过实际代码示例,我们将展示如何有效地管理运行时错误,并确保程序即使在面对意外情况时也能优雅地执行。
|
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 一定会执行吗
88 0
|
SQL 数据采集 数据库连接
java127-finally语句
java127-finally语句
103 0
|
Java 编译器
Java - try、catch、finally(包含 return)
Java - try、catch、finally(包含 return)
194 0
|
Java
final,finally,finaliz的区别(Java)
final,finally,finaliz的区别(Java)
149 0