"最终"块的功能是什么?

Vba*_*bey 1 java try-catch-finally

class Demo {
    public static void main(String args[]) {
        System.out.println("Start main");
        try {
            //exceptional code
            int x=43/0;
        } catch(ArithmeticException e) {
            e.printStackTrace();
        } finally {
            System.out.println("final code");
        }
        System.out.println("End main");
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用上面的代码来理解finally块的机制.在这种情况下,我观​​察到的是,即使没有该catch块,finally块也会执行并显示发生的异常.但我观察到的差异是,当不使用catch块时,不会打印"End main".我想知道finally块执行的原因,即使未使用catch子句处理异常.我想知道finally块的基本功能是什么.

Jun*_*san 5

最后,块用于运行代码,而不管是否存在异常.最后总是执行相关的try块.

通常最后用于关闭try块中打开的资源.最后这样做的原因是,无论是否有例外,我们都应该关闭这个例子.但是在Java 7中,如果您对AutoCloseable资源使用try with resource,那么您真的不需要为此烦恼.

在你的代码中,finally的相关性除了学习最终如何工作之外什么也没有.

了解有关finally的更多信息:http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html

以及来自同一链接的说明:

重要提示:finally块是防止资源泄漏的关键工具.关闭文件或以其他方式恢复资源时,将代码放在finally块中以确保始终恢复资源.

如果您使用的是Java SE 7或更高版本,请考虑在这些情况下使用try-with-resources语句,这会在不再需要时自动释放系统资源.

  • Try-with-resource仅在您要关闭的资源实现"AutoCloseable"时才可用. (2认同)