一个关于finnally的执行顺序的特别说明
今天, 读到一段源码,对finally的执行顺序产生了一点疑惑, 源码如下:
在test方法中, finally是何时执行的呢?
执行结果是: 在"begin"之后, "end"之前, 执行了10次"finally " + i .
这与我之前对finally的执行顺序有很大差别, 在之前我一直认为finally语句块是方法中最后执行的. 但是对test方法来说, 以前的那种理解明显是一个悖论, 是不成立的.
接下来, 我编写了如下两段代码
在观察了这两段代码的执行结果与最初的test方法的执行结果十分类似, finally语句块都是在"begin"和"end"之间执行的.
由此我得出另一个对finally语句块执行顺序的结论:"finally语句块是在该finally语句块上一层语句块的最末执行的".
test 方法中finally语句块的上一层语句块是for语句块;
test1 方法中finally语句块的上一层语句块是if语句块;
test2 方法中finally语句块的上一层语句块由{}构成的;
特记载于此.