《Java Puzzlers》学习笔记之异常处理:finally中使用跳转语句的后果
2015-02-06 17:18
423 查看
转裁请注明本文地址啊^_^
编译运行:
![](https://img-blog.csdn.net/20150206165711165)
可以看到,代码按照try-catch-finally的顺序运行完后并没有退出方法,而是跳出finally运行剩下的代码
其实还可以进一步改造这个代码
编译运行:
![](https://img-blog.csdn.net/20150206171027409)
呐呢!通过结果可以看到,代码不仅没有在运行完finally后退出indecisionException方法,而且此方法的调用者还没能捕获到抛出的异常。
那么把break语句换成continue又会更怎样呢?小伙伴们应该能脑补到结果吧——代码会在while-continue间根本停不下来啦!
(完)
在《Java Puzzles - Puzzle 36:Indecision》中,通过例子详细的讨论了异常处理finally作用域使用return的后果,并且引申说明,finally作用域里还不应该使用break和continue这个跳转语句。那如果在finally作用域里使用了break或continue会怎样呢? 先看看使用break会怎样。码个例子先:
import java.io.*; public class ExceptionIndecisionTest { static int indecisionException() { while(true) { try { System.out.println("try block"); throw new Exception(); } catch(Exception e) { System.out.println("catch Exception"); } finally { System.out.println("finally block"); break; } } System.out.println("out block"); return 2; } public static void main(String[] args) { System.out.println("return val = "+indecisionException()); } }
编译运行:
可以看到,代码按照try-catch-finally的顺序运行完后并没有退出方法,而是跳出finally运行剩下的代码
其实还可以进一步改造这个代码
import java.io.*; public class ExceptionIndecisionTest { /* * 增加异常抛出 */ static int indecisionException() throws Exception { while(true) { try { System.out.println("try block"); throw new Exception(); //return 0; } /* * 这里不处理异常,由调用者处理 */ /*catch(Exception e) { System.out.println("catch Exception"); }*/ finally { System.out.println("finally block"); //return 1; //continue; break; } } System.out.println("out block"); return 2; } public static void main(String[] args) { /* * 增加异常处理 */ try { System.out.println("return val = " + indecisionException()); } catch(Exception e) { System.out.println("catch Exception"); } } }
编译运行:
呐呢!通过结果可以看到,代码不仅没有在运行完finally后退出indecisionException方法,而且此方法的调用者还没能捕获到抛出的异常。
那么把break语句换成continue又会更怎样呢?小伙伴们应该能脑补到结果吧——代码会在while-continue间根本停不下来啦!
(完)
相关文章推荐
- java异常处理-finally中使用return和throw语句
- 嵌入SQL中(DB2)异常处理WHENEVER语句的使用
- 第04章 异常处理 05 异常的捕获和处理 finally语句
- Java异常处理之try...catch...语句的使用进阶
- 异常处理相关 try/finally语句
- 使用两个不同类型的数据进行加法计算时,使用异常处理语句捕获由于数据类型错误而出现的异常,发生生成错误。是否继续并运行上次的成功生成?
- C#异常处理-关键字finally的使用
- 【慕课笔记】第一章 异常与异常处理 第2节 使用try...catch...finally实现异常处理
- Java异常处理中同时有finally和return语句的执行问题
- 异常处理的try-catch-finally语句
- Java study 10day--finally与异常处理语句格式
- c#描述异常处理语句try、catch、finally执行时的相互关系
- Swift中使用do-catch语句进行异常处理
- 使用异常处理语句需要注意的几个问题
- Java异常处理中,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- 描述异常处理语句try、catch、finally执行时的相互关系
- Java基本功练习十八(异常处理【获取异常信息、链式异常和finally语句、自定制异常】)
- java异常处理之使用finally
- C#中异常的处理方法 try{} eatch{} finally{} 的使用
- C++中异常处理的基本思想及throw语句抛出异常的使用