java finally代码块总会被执行么

标签 IT工具网 java

问题

有一个 try/catch 代码块,其中包含一个打印语句。finally代码块总会被执行么?

示例:

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

回答

  1. finally 将会被调用。
    只有以下情况 finally 不会被调用:

    • 当你使用 System.exit()
    • 其他线程干扰了现在运行的线程(通过 interrupt 方法)
    • JVM 崩溃( crash )了

Answered by Jodonnell, edited by jpaugh.

  1. //示例代码
class Test
{
    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

Answered by Kevin


原文链接:http://stackoverflow.com/questions/65035/does-finally-always-execute-in-java?page=1&tab=votes#tab-top

相关文章:

java - JVM 是否保证缓存非 volatile 变量?

java - 打印格式化数组值循环吗?

java - 在SWT FXCanvas中嵌入JavaFX时解决DPI缩放

java - Guava MapMaker 和 JDK ConcurrentMap 是否使用读/写锁?

加载JNI共享库失败(JDK)

为什么数学函数Math.round(0.49999999999999994) 返回 1

java遍历集合时移除元素,怎样避免ConcurrentModificationException异常抛出

JavaScript中的事件委托(delegate)

-bash: ./configure: Permission denied 的解决方案

java - 为什么我的代码输出数千次?