try语句中没有发生异常
没有return语句
此时执行顺序是,先执行try语句然后执行finally语句
try中有return语句
会在return之前执行finally语句
try语句中发生异常
异常若被catch捕捉
跳过try中剩下的语句,执行catch语句,然后执行finally语句
异常未被catch捕捉
跳过try中剩下的语句,然后执行finally
有return语句
- 无论是否发生异常,finally语句一定会执行,如果在finally语句中放入了return语句,则try以及catch中的return语句全部失效;
- 如果finally中没有return而try、catch语句中有return,当在 try 块或 catch 块中遇到 return语句时,finally语句块将在方法返回之前被执行
finally 中的代码一定会执行吗?
不一定,以下情况finally 中的代码不会被执行。
-
finally 之前虚拟机被终止运行(System.exit(0))的话,finally 中的代码就不会被执行。
-
程序所在的线程死亡。
-
关闭 CPU。