try和catch以及finally执行顺序
来源:互联网 发布:如何提高口语 知乎 编辑:程序博客网 时间:2024/06/08 04:26
在项目中经常会用到try、catch、finally等,那么如果我们不了它们的运行顺序以及原理,我们将会做出很多错误的操作,也会让我们的计划失败。
那么现在咱们就用一个例子来掰一掰这个问题(以下均指单线程)。
第一种情况:在程序最后面有一个return
public class Main { public static void main(String[] args) { System.out.print(sum()); } static int sum(){ int i = 0; try{ i += 5; } catch(Exception e){ i += 6; } finally{ i += 2; } return i; }}结果:i = 7。
原因:程序正常执行先执行try,然后finally,最后return。
第二种:在try和catch和finally都存在return
public class Main { public static void main(String[] args) { System.out.print(sum()); } static int sum(){ int i = 0; try{ i += 5; return i; } catch(Exception e){ i += 6; return i; } finally{ i += 2; return i; } }}
结果:i = 7.
原因:当三者都有return时,程序会先执行try中的return,如果不报错,直接执行finally中的i += 2,然后执行finally中的return,将i = 7返回。
第三种:finally中没有return,但是try中有
public class Main { public static void main(String[] args) { System.out.print(sum()); } static int sum(){ int i = 0; try{System.out.print("A"); i += 5; return i; } catch(Exception e){ i += 6; return i; } finally{ i += 2; } }}
结果:i = 5;
原因:程序先执行 i+= 5,i 此时变为5,然后try中的return,将 i 存储,变为待返回值,其实这时已经确定了返回值为5,
如果下面没有return的话,那么返回5,即使finally中对 i 进行了操作。
相信你看到这里已经明白怎么做了吧,业务中遇到情景可以根据这三种措施采用不同的处理方式。另外也欢迎大家进行修正和交流。。。
阅读全文
0 0
- try和catch以及finally执行顺序
- try,catch和finally的执行顺序
- try catch finally执行顺序
- try catch finally执行顺序
- try catch finally执行顺序
- try catch finally执行顺序
- try-catch-finally执行顺序
- try catch finally执行顺序
- try-catch-finally执行顺序
- try catch finally执行顺序
- finally在try和catch块以及return中的执行顺序
- try...catch...finally中的执行顺序和return语句 总结
- 捕捉异常中try、catch和finally的执行顺序
- java中try{}catch{}和finally{}的执行顺序问题
- try catch finally执行顺序和return值
- java中try{}catch{}和finally{}的执行顺序问题
- java中try{}catch{}和finally{}的执行顺序问题
- try-catch语句中return和finally执行顺序详解
- 比较centos与ubuntu的不同
- 计算机视觉领域的大牛vision guys(按师承关系)
- MATLAB 简单的数据拟合
- Spring Cloud全家桶主要组件及简要介绍
- 阿里巴巴高级专家为你为你讲解分布式系统开发——调度技术
- try和catch以及finally执行顺序
- 解决CentOS出现"No package redis available"提示问题
- IOS coreData 编译出错
- 2、JSTL备忘
- 怎么在Navicat中设置某个表的某一列为unique(唯一的)
- MySQL注入load_file常用路径
- 关于automaticallyAdjustsScrollViewInsets和 edgesForExtendedLayout的理解
- Vue父子组件传值
- JOB:前端面试4