繁体   English   中英

“最终”块的功能是什么?

[英]What is the functionality of a “finally” block?

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");
    }
}

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

最后,无论是否存在异常,都使用块来运行代码。 最后,总是为相关的try块执行。

通常,finally通常用于关闭在try块中打开的资源。 最后这样做的原因是,无论是否有异常,我们都应该关闭资源。 但是在Java 7中,如果您对自动关闭的资源使用try资源,那么您实际上不需要理会。

在您的代码中,finally的相关性仅在于了解finally的工作原理。

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

和来自同一链接的注释:

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

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

无论trycatch块发生什么, finally原因都会为您确保*将被执行。

*仅当您在try / catch块中运行当前Thread时中断或杀死该Thread时, finally块才会执行。

这是更具体的文档

Java教程

try块退出时,finally块始终执行。 这样可以确保即使发生意外异常,也可以执行finally块。 但是,最后,它不仅对异常处理有用,它还使程序员避免因返回,继续或中断而意外地跳过清理代码。 即使在没有例外的情况下,将清除代码放在finally块中始终是一个好习惯。

因此,如果您必须保证正在执行某项操作,例如somePrintWriter.close() ,但仍要在此之前处理任何异常,则finally块将执行该操作。

在Java中使用try-catch-finally块或try-with-resources块来实现与C ++中的对象终结器类似的功能。

当它们用于异常处理时, finally语句块最重要的功能可能是关闭或释放在try块中执行代码期间已打开或创建的资源。

请注意,对象终结器在Java中存在(某种形式),但几乎不应使用它们来终结对象……很奇怪,是吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM