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,如需转载请自行联系原作者
目录
相关文章
|
24天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
45 2
|
26天前
|
Java 程序员 数据库连接
Java执行顺序大揭秘:静态块、非静态块和构造方法谁先谁后?
本文详细介绍了Java中的初始化块,包括静态初始化块和非静态初始化块的概念、执行顺序和实际应用场景。通过具体示例,帮助读者理解这两种初始化块的区别和使用场景,让面试官对你刮目相看。
29 0
Java执行顺序大揭秘:静态块、非静态块和构造方法谁先谁后?
|
2月前
|
存储 Java
[Java]面试官:你对异常处理了解多少,例如,finally中可以有return吗?
本文介绍了Java中`try...catch...finally`语句的使用细节及返回值问题,并探讨了JDK1.7引入的`try...with...resources`新特性,强调了异常处理机制及资源自动关闭的优势。
23 1
|
2月前
|
Java
java中父类方法return this.对象还是变量,子类去调用this.这个方法的问题
本文探讨了在Java中,当父类的方法返回`this`对象或变量时,子类调用该方法的行为,以及`this`关键字在不同类中调用方法时的指向问题。
16 0
java中父类方法return this.对象还是变量,子类去调用this.这个方法的问题
|
2月前
|
缓存 安全 Java
Java中 final、finally、finalize 有什么区别?
本文详细阐述了Java中`final`、`finally`和`finalize`的区别:`final`用于修饰类、方法和变量以表示不可变性;`finally`是用于确保在`try-catch`结构中无论是否发生异常都能执行的代码块;而`finalize`是`Object`类的方法,用于在对象被垃圾回收前执行清理工作,但在JDK 9中已被标记为弃用。
37 0
Java中 final、finally、finalize 有什么区别?
|
4月前
|
Java
【Java基础面试三十九】、 finally是无条件执行的吗?
这篇文章解释了Java中的finally块的特性,即无论是否发生异常或执行了return语句,finally块都会无条件执行,除非使用System.exit()退出虚拟机。
|
4月前
|
Java 数据安全/隐私保护
Java代码的执行顺序和构造方法
构造方法是类的一种特殊方法,用于初始化新对象。在 Java 中,每个类默认都有一个与类名同名的构造方法,无需返回类型。构造方法不能用 static、final、synchronized、abstract 或 native 修饰。它可以重载,通过不同的参数列表实现多种初始化方式。构造方法在对象实例化时自动调用,若未显式声明,默认提供一个无参构造方法。构造代码块和静态代码块分别用于对象和类的初始化,按特定顺序执行。
33 0
|
4月前
|
Java
【Java基础面试四十】、在finally中return会发生什么?
文章讨论了在Java中finally块中使用return语句的问题,指出如果在finally块中使用return或throw语句,将导致try块或catch块中的相应语句失效,因为finally块中的return或throw会终止方法,之后系统不会再执行try或catch块中的代码。
|
Java
java中finally和return的执行顺序
注意:return的位置。。。从这几个例子中可以看到,如果try之前没有有条件的return,则try..catch..finally语句块中的语句都是顺序执行(如果try中或者catch中 有return语句,那么先执行该return,然后执行finally, 如果finally中也有return, 该出的返回值会覆盖掉try 和 catch中的return值; 如果try.
846 0