至少有两种状况下finally语句是不会被执行的:code
(1)try语句没有被执行到,如在try语句以前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句必定被执行到。虚拟机
(2)在try块中有System.exit(0);这样的语句,System.exit(0);是终止Java虚拟机JVM的,连JVM都中止了,全部都结束了,固然finally语句也不会被执行到。it
public String test() { try { Object obj = null; if(obj.equals("123")){ System.out.println("123"); } return "try block"; } catch (Exception e) { return "catch block"; } finally { System.out.println("d"); //return "finally block"; } }
如上代码:io
先执行finally代码块,而后返回try或catch的return值。test
注:方法
不能在finally块中使用return,finally块中的return返回后方法结束执行,不会再执行try或catch块中的return语句。co