包含finally的异常代码块里的return,break,continue语句如何执行
2017-02-26 18:22
573 查看
包含finally的异常代码块结构如下:
try{ return;}catch(){return;} finally{return;}
这种结构里的return语句怎么执行呢?因为这是有finally时的情况,比较特殊。
首先,执行try代码块中位于“return”之前的代码(包括return语句中的表达式运算,比如return 1+1,这个1+1也会被执行),意思就是程序计算了return语句,也知道了return的结果是什么,同时会保存下来,但不立即返回这个结果。
接下来分两种情况,没有异常或者有异常:
没有异常,程序接着执行finally块,返回finally块中的return结果。
有异常,执行catch块中位于“return”之前的代码(包括return语句中的表达式运算),但不立即返回,然后紧跟着执行finally块,因为finally块中有return所以提前退出,覆盖了前边的return,所以并不会返回异常。
同理也适用于continue和break:
即如果有finally的情况下,try中的break或continue都不会立即执行,程序会紧跟着把finally中的语句执行完。
try{ return;}catch(){return;} finally{return;}
这种结构里的return语句怎么执行呢?因为这是有finally时的情况,比较特殊。
首先,执行try代码块中位于“return”之前的代码(包括return语句中的表达式运算,比如return 1+1,这个1+1也会被执行),意思就是程序计算了return语句,也知道了return的结果是什么,同时会保存下来,但不立即返回这个结果。
接下来分两种情况,没有异常或者有异常:
没有异常,程序接着执行finally块,返回finally块中的return结果。
有异常,执行catch块中位于“return”之前的代码(包括return语句中的表达式运算),但不立即返回,然后紧跟着执行finally块,因为finally块中有return所以提前退出,覆盖了前边的return,所以并不会返回异常。
同理也适用于continue和break:
即如果有finally的情况下,try中的break或continue都不会立即执行,程序会紧跟着把finally中的语句执行完。
相关文章推荐
- java中异常处理finally和return语句的执行顺序
- Java异常处理中,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- try ,finally都抛出异常如何处理.如果try中抛出了异常,在控制权转移到调用栈上一层代码之前, finally 语句块也会执行,如果finally抛出异常,try语句快抛出的那个异常就
- Java关键字 Finally执行与break, continue, return等关键字的关系
- java中异常处理finally和return语句的执行顺序
- java中异常处理finally和return语句的执行顺序
- java中异常处理finally和return语句的执行顺序
- java中异常处理finally和return语句的执行顺序
- Java异常处理中同时有finally和return语句的执行问题
- Java异常处理中,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- try与finally一起使用时,try语句发生异常,如何继续执行代码到finally语句块
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- C# 跳转语句(break,continue,goto,return,throw)
- C# 跳转语句(break,continue,goto,return,throw)
- SQL server中如何使用return,break和continue
- C# 跳转语句(break,continue,goto,return,throw)
- try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?
- c语言有4个跳转语句return、goto、break、continue
- [引]C#参考跳转语句(break,continue,goto,return,throw)
- C# 跳转语句(break,continue,goto,return,throw)