Java异常捕获之try-catch-finally-return的执行顺序
来源:互联网 发布:上海周边温泉知乎 编辑:程序博客网 时间:2024/06/10 09:31
情况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块的执行
原文转载于:http://blog.csdn.net/aaoxue/article/details/8535754
- Java异常捕获之try-catch-finally-return的执行顺序
- Java异常捕获之try-catch-finally-return的执行顺序
- Java异常捕获之try-catch-finally-return的执行顺序
- Java异常捕获之try-catch-finally-return的执行顺序
- Java异常捕获之try-catch-finally-return的执行顺序
- java异常try catch finally中return具体执行顺序
- 异常处理及try/catch/finally/return 的执行顺序:
- try, catch, finally, return的执行顺序
- try、catch、finally、return的执行顺序
- try、catch、finally、return的执行顺序
- try catch finally return 的执行顺序
- try、catch、finally、return的执行顺序
- try catch finally return 的执行顺序
- try catch finally return 的执行顺序
- try-catch-finally-return的执行顺序
- try、catch、finally、return的执行顺序
- try catch finally return 的执行顺序
- Java含有return 的try catch finally的执行顺序
- oauth2开放认证协议原理及案例分析
- SwitchyOmega和GoAgentX
- 手机号批量上传处理
- 守护进程
- HDU 2647--Reward【拓扑排序】
- Java异常捕获之try-catch-finally-return的执行顺序
- [转] 贝塞尔曲线基础
- 利用Cordys插件 上传文件到 Cordys服务器目录
- jQuery 遍历 - each() 方法
- js中的宽度、高度、偏移量问题,offset、client、scroll
- KMP算法2
- UVA 题目1521 GCD Guessing Game(数论+贪心)
- 好吧,之前写的博客都没了
- ios 获得设备型号