情况1:try块中没有抛出异常try和finally块中都有return语句

  1. public static int NoException(){
  2. int i=10;
  3. try{
  4. System.out.println("i in try block is"+i);
  5. return --i;
  6. }catch(Exception e){
  7. --i;
  8. System.out.println("i in catch - form try block is"+i);
  9. return --i;
  10. }finally{
  11. System.out.println("i in finally - from try or catch block is"+i);
  12. return --i;
  13. }
  14. }

执行结果:

i in try block is10
i in finally - from try or catch block is9
the method value is8

执行顺序:执行try块,执行到return语句时,先执行return的语句,--i,但是不返回到main 方法,执行finally块,遇到finally块中的return语句,执行--i,并将值返回到main方法,这里就不会再回去返回try块中计算得到的值

情况2:try块中没有抛出异常,仅try中有return语句

代码:

  1. public static int NoException(){
  2. int i=10;
  3. try{
  4. System.out.println("i in try block is--"+i);
  5. return --i;
  6. }catch(Exception e){
  7. --i;
  8. System.out.println("i in catch - form try block is--"+i);
  9. return --i;
  10. }finally{
  11. System.out.println("i in finally - from try or catch block is--"+i);
  12. --i;
  13. System.out.println("i in finally block is--"+i);
  14. //return --i;
  15. }
  16. }

执行结果:

i in try block is--10
i in finally - from try or catch block is--9
i in finally block is--8
the method value is--9

顺序:try中执行完return的语句后,不返回,执行finally块,finally块执行结束后,返回到try块中,返回i在try块中最后的值

情况3:try块中抛出异常try,catch,finally中都有return语句

代码:

  1. public static int WithException(){
  2. int i=10;
  3. try{
  4. System.out.println("i in try block is--"+i);
  5. i = i/0;
  6. return --i;
  7. }catch(Exception e){
  8. System.out.println("i in catch - form try block is--"+i);
  9. --i;
  10. System.out.println("i in catch block is--"+i);
  11. return --i;
  12. }finally{
  13. System.out.println("i in finally - from try or catch block is--"+i);
  14. --i;
  15. System.out.println("i in finally block is--"+i);
  16. return --i;
  17. }
  18. }

执行结果:

i in try block is--10
i in catch - form try block is--10
i in catch block is--9
i in finally - from try or catch block is--8
i in finally block is--7
the method value is--6

顺序,抛出异常后,执行catch块,在catch块的return的--i执行完后,并不直接返回而是执行finally,因finally中有return语句,所以,执行,返回结果6

情况4,catch中有return,finally中没有,同上,执行完finally语句后,依旧返回catch中的执行return语句后的值,而不是finally中修改的值

情况5:try和catch中都有异常,finally中无return语句

  1. public static int CatchException(){
  2. int i=10;
  3. try{
  4. System.out.println("i in try block is--"+i);
  5. i=i/0;
  6. return --i;
  7. }catch(Exception e){
  8. System.out.println("i in catch - form try block is--"+i);
  9. int j = i/0;
  10. return --i;
  11. }finally{
  12. System.out.println("i in finally - from try or catch block is--"+i);
  13. --i;
  14. System.out.println("i in finally block is--"+i);
  15. //return --i;
  16. }
  17. }

结果:

i in try block is--10
i in catch - form try block is--10
i in finally - from try or catch block is--10
i in finally block is--9
Exception in thread "main" java.lang.ArithmeticException: / by zero
 at exception.ExceptionTest0123.CatchException(ExceptionTest0123.java:29)
 at exception.ExceptionTest0123.main(ExceptionTest0123.java:17)

执行顺序:在try块中出现异常,到catch中,执行到异常,到finally中执行,finally执行结束后判断发现异常,抛出

情况6:try,catch中都出现异常,在finally中有返回

  1. public static int CatchException(){
  2. int i=10;
  3. try{
  4. System.out.println("i in try block is--"+i);
  5. i=i/0;
  6. return --i;
  7. }catch(Exception e){
  8. System.out.println("i in catch - form try block is--"+i);
  9. int j = i/0;
  10. return --i;
  11. }finally{
  12. System.out.println("i in finally - from try or catch block is--"+i);
  13. --i;
  14. System.out.println("i in finally block is--"+i);
  15. return --i;
  16. }
  17. }

运行结果:

i in try block is--10
i in catch - form try block is--10
i in finally - from try or catch block is--10
i in finally block is--9
the method value is--8

执行顺序:try块中出现异常到catch,catch中出现异常到finally,finally中执行到return语句返回,不检查异常

没有catch,只有try和finally时,执行顺序和上面的几种情况差不多,只是少了catch块的执行

Java异常捕获之try-catch-finally-return的执行顺序-转载的更多相关文章

  1. Java异常处理中finally中的return会覆盖catch语句中的return语句

    Java异常处理中finally中的return会覆盖catch语句中的return语句和throw语句,所以Java不建议在finally中使用return语句 此外 finally中的throw语 ...

  2. Java异常之try,catch,finally,throw,throws

    Java异常之try,catch,finally,throw,throws 你能区分异常和错误吗? 我们每天上班,正常情况下可能30分钟就能到达.但是由于车多,人多,道路拥挤,致使我们要花费更多地时间 ...

  3. JAVA中try、catch、finally带return的执行顺序总结

    异常处理中,try.catch.finally的执行顺序,大家都知道是按顺序执行的.即,如果try中没有异常,则顺序为try→finally,如果try中有异常,则顺序为try→catch→final ...

  4. 我敢说你不一定完全理解try 块,catch块,finally 块中return的执行顺序

    大家好,今天我们来讲一个笔试和面试偶尔都会问到的问题,并且在工作中不知道原理,也会造成滥用. 大家可能都知道,try 块用来捕获异常,catch块是处理try块捕获的异常,finally 块是用来关闭 ...

  5. 浅谈Java语言中try{}catch{}和finally{}的执行顺序问题

    浅谈Java语言中try{}catch{}和finally{}的执行顺序问题 2019-04-06  PM  13:41:46  1. 不管有没有出现异常,finally块中代码都会执行: 2. 当t ...

  6. “全栈2019”Java异常第二十一章:finally不被执行的情况

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  7. “全栈2019”Java异常第五章:一定会被执行的finally代码块

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  8. 关于java中构造方法、实例初始化、静态初始化执行顺序

    在Java笔试中,构造方法.实例初始化.静态初始化执行顺序,是一个经常被考察的知识点. 像下面的这道题(刚刚刷题做到,虽然做对了,但是还是想整理一下) 运行下面的代码,输出的结果是... class ...

  9. java异常捕获

    类ExampleA继承Exception,类ExampleB继承ExampleA. 有如下代码片断: try { throw new ExampleB("b") } catch(E ...

  10. java异常捕获的一点感悟

    class Annoyance extends Exception {} class Sneeze extends Annoyance {} class Human { public static v ...

随机推荐

  1. MS SQL SERVER 锁研究记录

    首先创建一直数据表 ChenJi,有如下字段: ID, DanWeiID,  Name,  ChenJi CREATE TABLE [dbo].[ChenJi]( [ID] [int] NOT NUL ...

  2. mongodb远程连接以及备份、还原、导出、导入

    一.远程连接mongodb 连接命令:mongo -u username -p pwd 192.168.41.215:27017/database(用户名对应的数据库) 二.mongodump备份数据 ...

  3. (Abstract Factory)抽象工厂

    定义: 抽象工厂同工厂方法有相似处:都提供了对子类创建的封装,都是有工厂方法的接口实现类的中决定了子类被创建为什么对象. 不同于工厂方法之处:工厂方法创建的对象只是一个类型的子类,而抽象工厂创建的对象 ...

  4. transient关键字的含义

    transient java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持. Java的serialization提供了一种持久化对象实例的机制.当 ...

  5. Leetcode: Mini Parser

    Given a nested list of integers represented as a string, implement a parser to deserialize it. Each ...

  6. navicat 的查询功能

    navicat的查询的位置在: 在编辑器界面写代码,代码完成后点左上角的运行. 代码: create(创建)  table(一个表) <xxx>尖括号内的内容必填——我要创建并查询一个名叫 ...

  7. android EditText长按屏蔽ActionMode context菜单但保留选择工具功能

    最近项目要求屏蔽EditText 长按出来的ActionMode菜单,但是要保留选择文本功能.这个屏蔽百度会出现各种方法,这里说一下我的思路: 1.屏蔽百度可知setCustomSelectionAc ...

  8. paper 10:支持向量机系列七:Kernel II —— 核方法的一些理论补充,关于 Reproducing Kernel Hilbert Space 和 Representer Theorem 的简介。

    在之前我们介绍了如何用 Kernel 方法来将线性 SVM 进行推广以使其能够处理非线性的情况,那里用到的方法就是通过一个非线性映射 ϕ(⋅) 将原始数据进行映射,使得原来的非线性问题在映射之后的空间 ...

  9. rails创建项目,部署,测试流程(rails5.0+ruby2.3.1)

    rails new test_app --skip-test-unit 不生成默认的test,稍后用rspeccd test_app 修改Gemfile(大部分为自动生成) source 'https ...

  10. 夺命雷公狗—angularjs—25—angular内置的方法(高级)

    查看版本信息 angular.version console.log(angular.version); 判断是否相等 angular.equals() var str1 = ''; var str2 ...