至少有两种情况下finally语句是不会被执行的:
(1)try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。
(2)在try块中有System.exit(0);这样的语句,System.exit(0);是终止Java虚拟机JVM的,连JVM都停止了,所有都结束了,当然finally语句也不会被执行到。
finally块中的语句对return的影响
1.finally块的语句在try或catch中的return语句执行之后返回之前执行;
2.且finally里的修改语句(址传递)可能影响(值传递)也可能不影响try或catch中 return已经确定的返回值;
3.若finally里也有return语句则覆盖try或catch中的return语句直接返回;