最终总是在Java中执行?

考虑到这个代码,我可以绝对确定finally块总是执行,不管什么something()是什么?

try {  
    something();  
    return success;  
}  
catch (Exception e) {   
    return failure;  
}  
finally {  
    System.out.println("i don't know if this will get printed out.");
}

是的, finally会被召唤。

finally不会被调用的唯一时间是:

  • 如果你调用System.exit() ;
  • 如果JVM首先崩溃;
  • 如果JVM在trycatch块中达到无限循环(或其他不可中断,非终止语句);
  • 如果操作系统强制终止JVM进程; 例如UNIX上的“kill -9”。
  • 如果主机系统死亡; 例如电源故障,硬件错误,操作系统恐慌等等。

  • 示例代码:

    public static void main(String[] args) {
        System.out.println(Test.test());
    }
    
    public static int test() {
        try {
            return 0;
        }
        finally {
            System.out.println("finally trumps return.");
        }
    }
    

    输出:

    finally trumps return. 
    0
    

    此外,虽然这是一种不好的做法,但如果finally块中有return语句,它将胜过常规块的任何其他返回。 也就是说,下面的块会返回false:

    try { return true; } finally { return false; }
    

    同样的事情,从finally块中抛出异常。

    链接地址: http://www.djcxy.com/p/2021.html

    上一篇: Does finally always execute in Java?

    下一篇: Difference between a += 10 and a = a + 10 in java?