try
语句没有被执行到,如在
try
语句之前就返回了,这样
finally
语句就不会执行,这也说明了
finally
语句被执行的必要而非充分条件是:相应的
try
语句一定被执行到。
在 try
块中有
System.exit(0);
这样的语句,
System.exit(0);
是终止
Java
虚拟机
jvm
的,连
jvm
都停止了,所有都结束了,当然
finally
语句也不会被执行到。
除了以上情况(jvm 停止):
不管有木有出现异常,finally
块中代码都会执行;
当 try
和
catch
中有
return
时,
finally
仍然会执行;
finally
是在
return
后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管
finally
中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),所以函数返回值是在
finally
执行前确定的;
finally
中最好不要包含
return
,否则程序会提前退出,返回值不是
try
或
catch
中保存的返回值。