天天看点

包含finally的异常代码块里的return,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中的语句执行完。