是的,除非由于JVM崩溃或对System.exit()的调用而导致程序异常终止,否则始终执行finally块。
无论是否发生异常,总是执行finally块。
如果发生诸如关闭文件或数据库连接之类的异常,则使用finally块清除代码。
我们不能说finally块总是执行,因为有时如果将诸如System.exit()或类似代码的任何语句写入try块,则程序将自动终止,并且在这种情况下将不会执行finally块。
由于其他条件(如JVM内存不足,当我们的Java进程由于try块中的电源故障和死锁情况而关闭时,我们的计算机从任务管理器或控制台中被强制杀死)时,finally块将不会执行。
public class FinallyBlock { public static void main(String args[]){ try { int a=10,b=30; int c = b/a; System.out.println(c); } catch(ArithmeticException ae){ System.out.println(ae); } finally { System.out.println("finally block is always executed"); } } }
在上面的示例中,无论是否发生异常,总是执行finally块。
输出结果
3 finally block is always executed
public class FinallyBlock { public static void main(String args[]) { try { System.out.println("I am in try block"); System.exit(1); } catch(Exception ex){ ex.printStackTrace(); } finally { System.out.println("I am in finally block"); } } }
在上面的示例中,由于try块中的System.exit(1)条件,无法执行finally块。
输出结果
I am in try block