Java异常捕获之try-catch-finally-return的执行顺序-转载
情况1:try块中没有抛出异常try和finally块中都有return语句
- public static int NoException(){
- int i=10;
- try{
- System.out.println("i in try block is"+i);
- return --i;
- }catch(Exception e){
- --i;
- System.out.println("i in catch - form try block is"+i);
- return --i;
- }finally{
- System.out.println("i in finally - from try or catch block is"+i);
- return --i;
- }
- }
执行结果:
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语句
代码:
- public static int NoException(){
- int i=10;
- try{
- System.out.println("i in try block is--"+i);
- return --i;
- }catch(Exception e){
- --i;
- System.out.println("i in catch - form try block is--"+i);
- return --i;
- }finally{
- System.out.println("i in finally - from try or catch block is--"+i);
- --i;
- System.out.println("i in finally block is--"+i);
- //return --i;
- }
- }
执行结果:
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语句
代码:
- public static int WithException(){
- int i=10;
- try{
- System.out.println("i in try block is--"+i);
- i = i/0;
- return --i;
- }catch(Exception e){
- System.out.println("i in catch - form try block is--"+i);
- --i;
- System.out.println("i in catch block is--"+i);
- return --i;
- }finally{
- System.out.println("i in finally - from try or catch block is--"+i);
- --i;
- System.out.println("i in finally block is--"+i);
- return --i;
- }
- }
执行结果:
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语句
- public static int CatchException(){
- int i=10;
- try{
- System.out.println("i in try block is--"+i);
- i=i/0;
- return --i;
- }catch(Exception e){
- System.out.println("i in catch - form try block is--"+i);
- int j = i/0;
- return --i;
- }finally{
- System.out.println("i in finally - from try or catch block is--"+i);
- --i;
- System.out.println("i in finally block is--"+i);
- //return --i;
- }
- }
结果:
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中有返回
- public static int CatchException(){
- int i=10;
- try{
- System.out.println("i in try block is--"+i);
- i=i/0;
- return --i;
- }catch(Exception e){
- System.out.println("i in catch - form try block is--"+i);
- int j = i/0;
- return --i;
- }finally{
- System.out.println("i in finally - from try or catch block is--"+i);
- --i;
- System.out.println("i in finally block is--"+i);
- return --i;
- }
- }
运行结果:
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的执行顺序-转载的更多相关文章
- Java异常处理中finally中的return会覆盖catch语句中的return语句
Java异常处理中finally中的return会覆盖catch语句中的return语句和throw语句,所以Java不建议在finally中使用return语句 此外 finally中的throw语 ...
- Java异常之try,catch,finally,throw,throws
Java异常之try,catch,finally,throw,throws 你能区分异常和错误吗? 我们每天上班,正常情况下可能30分钟就能到达.但是由于车多,人多,道路拥挤,致使我们要花费更多地时间 ...
- JAVA中try、catch、finally带return的执行顺序总结
异常处理中,try.catch.finally的执行顺序,大家都知道是按顺序执行的.即,如果try中没有异常,则顺序为try→finally,如果try中有异常,则顺序为try→catch→final ...
- 我敢说你不一定完全理解try 块,catch块,finally 块中return的执行顺序
大家好,今天我们来讲一个笔试和面试偶尔都会问到的问题,并且在工作中不知道原理,也会造成滥用. 大家可能都知道,try 块用来捕获异常,catch块是处理try块捕获的异常,finally 块是用来关闭 ...
- 浅谈Java语言中try{}catch{}和finally{}的执行顺序问题
浅谈Java语言中try{}catch{}和finally{}的执行顺序问题 2019-04-06 PM 13:41:46 1. 不管有没有出现异常,finally块中代码都会执行: 2. 当t ...
- “全栈2019”Java异常第二十一章:finally不被执行的情况
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- “全栈2019”Java异常第五章:一定会被执行的finally代码块
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- 关于java中构造方法、实例初始化、静态初始化执行顺序
在Java笔试中,构造方法.实例初始化.静态初始化执行顺序,是一个经常被考察的知识点. 像下面的这道题(刚刚刷题做到,虽然做对了,但是还是想整理一下) 运行下面的代码,输出的结果是... class ...
- java异常捕获
类ExampleA继承Exception,类ExampleB继承ExampleA. 有如下代码片断: try { throw new ExampleB("b") } catch(E ...
- java异常捕获的一点感悟
class Annoyance extends Exception {} class Sneeze extends Annoyance {} class Human { public static v ...
随机推荐
- autorelease应用
// // main.m // 02-autorelease应用 // // Created by apple on 14-3-18. // Copyright (c) 2014年 apple ...
- Java基础之处理事件——选项按钮的鼠标监听器(Lottery 2 with mouse listener)
控制台程序. 定义监听器类有许多方式.下面把监听器类定义为单独的类MouseHandler: // Mouse event handler for a selection button import ...
- j2ee Servlet、Filter、Listener
首先,JSP/Servlet规范中定义了Servlet.Filter.Listener这三种角色,并没有定义Interceptor这个角色,Interceptor是某些MVC框架中的角色,比如Stru ...
- c++ DISALLOW_COPY_AND_ASSIGN
Google C++编程规范 – 第三十二条 -<拷贝构造函数> [规范] 仅在确认需要的时候,才定义拷贝构造函数和赋值运算符:否则,请使用DISALLOW_COPY_AND_ASSIGN ...
- WAL
WAL record format typedef struct XLogRecord{pg_crc32 xl_crc; /* CRC for this record */XLogRe ...
- Java中几种日志方案
.本文记录Java中几种常用的日志解决方案 0x01 Log4j .这应该是一个比较老牌的日志方案了,配置也比较简单,步骤如下 1)添加对应依赖,比如 Gradle 中 dependencies { ...
- Topcoder SRM 598 div2
e,不知道为啥进不去了,这个B题贪心,从最小和最大的匹配如果超过了就只去最大的! 然后就没了- -! 这场比赛时不知为啥,string出问题了,可能是编译器挂了!0蛋- -!
- zjuoj 3609 Modular Inverse
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3609 Modular Inverse Time Limit: 2 Seco ...
- [原创]java WEB学习笔记70:Struts2 学习之路-- 输入验证,声明式验证,声明是验证原理
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Java基础(39):数据的四舍五入、去整、产生随机数---Math类的应用
使用 Math 类操作数据 Math 类位于 java.lang 包中,包含用于执行基本数学运算的方法, Math 类的所有方法都是静态方法,所以使用该类中的方法时,可以直接使用类名.方法名,如: M ...