包含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中的语句执行完。