try-catch-finally中throw,return时的执行顺序
2017-11-13 17:13
549 查看
在我们使用try-catch-finally来捕获处理异常的时候,我们可能会存在一些疑惑,比如,什么时候执行catch中的程序模块,什么时候执行finally找那个的模块?
首先,要肯定的时,catch的程序模块只会在当前的try中的代码出现异常的时,被catch所捕获后,此时就会执行catch中的代码块。而finally却是无论try模块是否出现了异常的情况下,都会执行的。
1.如果当前的try模块中没有出现异常,那么在执行完,try中的语句后,就会正常执行到finally中的代码。
2.如果当前的try模块中出现了异常的情况的时候,执行的顺序是什么呢?此时就会是try只会执行完当前出现异常的语句的前一句,然后进入到catch中执行,catch中的代码块,但是此时又会分情况来考虑的,如:
(1)当前的catch语句中有throw语句的时候,此时会先将异常抛出,然后执行finally中的代码,但是此时只是抛出了异常,却没有马上对异常进行处理,只有finally中的代码执行完后,才会去上一层处理异常。
(2)当前的catch语句中出现了return语句的时候,那么此时就会先执行所有return前的代码块,然后执行return语句,但是此时的程序没有马上结束,还会继续执行finally中的代码块后,才会去真正的将结果return。
我们可以看一段代码:
在这个代码中,如果我们catch中是抛出异常时,我们在finally和catch中分别打一个断点的时候,执行顺序: e.printStackTrace(); –> throw e; –>System.out.print(“该资管计划已关联资产,不允许删除!”);
如果我们catch中是return时,我们在finally和catch中分别打一个断点的时候,执行顺序: e.printStackTrace(); –> return new CommResponse(true); –>System.out.print(“该资管计划已关联资产,不允许删除!”); –>return new CommResponse(true);
首先,要肯定的时,catch的程序模块只会在当前的try中的代码出现异常的时,被catch所捕获后,此时就会执行catch中的代码块。而finally却是无论try模块是否出现了异常的情况下,都会执行的。
1.如果当前的try模块中没有出现异常,那么在执行完,try中的语句后,就会正常执行到finally中的代码。
2.如果当前的try模块中出现了异常的情况的时候,执行的顺序是什么呢?此时就会是try只会执行完当前出现异常的语句的前一句,然后进入到catch中执行,catch中的代码块,但是此时又会分情况来考虑的,如:
(1)当前的catch语句中有throw语句的时候,此时会先将异常抛出,然后执行finally中的代码,但是此时只是抛出了异常,却没有马上对异常进行处理,只有finally中的代码执行完后,才会去上一层处理异常。
(2)当前的catch语句中出现了return语句的时候,那么此时就会先执行所有return前的代码块,然后执行return语句,但是此时的程序没有马上结束,还会继续执行finally中的代码块后,才会去真正的将结果return。
我们可以看一段代码:
@Override @Transactional public Object assetORGDelete(Map<String, Object> map) { try { if(judgeORGRelevanceExist(map)){ throw new BusinessException("该资管计划已关联资产,不允许删除!"); } // 删除基本信息 this.assetORGMapper.deleteAssetORGInfo(map); // 删除监管信息 this.assetORGMapper.deleteAssetORGPlan(map); } catch (Exception e) { e.printStackTrace(); throw e; // return new CommResponse(true); } finally { System.out.print("该资管计划已关联资产,不允许删除!"); } return new CommResponse(true); }
在这个代码中,如果我们catch中是抛出异常时,我们在finally和catch中分别打一个断点的时候,执行顺序: e.printStackTrace(); –> throw e; –>System.out.print(“该资管计划已关联资产,不允许删除!”);
如果我们catch中是return时,我们在finally和catch中分别打一个断点的时候,执行顺序: e.printStackTrace(); –> return new CommResponse(true); –>System.out.print(“该资管计划已关联资产,不允许删除!”); –>return new CommResponse(true);
相关文章推荐
- 关于Java中try catch finally throw return的执行顺序问题
- 有return的情况下try catch finally的执行顺序(最有说服力的总结) 后面的神评论
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- asp.net中try catch finally中含有return时的执行顺序
- 有return的情况下try catch finally的执行顺序
- try..catch..finally执行顺序return
- Java异常捕获之try-catch-finally-return的执行顺序
- 关于Java中try-catch-finally-return的执行顺序
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- 有return的情况下try catch finally的执行顺序
- 在有return的情况下try catch finally的执行顺序
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- 有return的情况下try catch finally的执行顺序
- 关于try-catch-finally-return的执行顺序的一些总结
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- try-catch-finally中return的执行顺序
- try、catch、finally、return的执行顺序
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- 有return的情况下try catch finally的执行顺序
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)