一般认为,finally最后执行,做收尾工作,无论try块是否捕获异常,最后finally都会工作。并且try块确实是运行了。搜了一些资料,是说finally会在方法结束之前执行,而之前所有的执行,包括return,全部都停留在栈中,而finally最终执行后才继续。所以这样也能解释,第一次代码本应该回溯的代码执行完finally后才回溯,return的时候也是等finally执行之后再执行。由此,也可以认为特殊情况导致程序直接结束,不会执行finally。因为finally一般写的都是关闭对象、资源的代码,所以这些特殊情况导致的程序强制结束,可能会引发一些问题的。

Java.try catch finally 的执行顺序说明

Java.try catch finally 的执行顺序说明

Java.try catch finally 的执行顺序说明

Java.try catch finally 的执行顺序说明

Java.try catch finally 的执行顺序说明