finally块最后执行的原因是什么?

时间:2016-06-26 10:54:34

标签: java try-catch finally

在Java中,为什么"最终"块存在:

Error: unsafe value used in a resource URL context
at DomSanitizationServiceImpl.sanitize...

而不是"首先"阻止?

[src]

2 个答案:

答案 0 :(得分:1)

这与

相同
try {
    try {
        ...
    } finally {
        // instructions firstly executed when the outer "try" block is quit
    }
} catch(...) {
    ...
}

这不是一种常见的模式,但如果是这样的话,它可能会以更惯用的方式得到支持。一般来说,finally用于关闭您不再需要的任何资源,并且您不太可能希望在异常处理中阻止访问这些资源。

  

唯一的区别是第一个块在catch子句之前执行,而不是在finally块之后执行。因此,例如,它可以在catch块(可以执行System.exit ...)之前正确关闭资源。

我认为关闭资源更有意义放在块的末尾而不是中间。

答案 1 :(得分:0)

  

在Java中,为什么“finally”块存在:

存在finally块,因此无论Exception出现在trycatch中还是根本不出现finally,它始终都会被执行。 finally用于放置关闭文件流,清理代码等代码......

如果您不喜欢try,则finally有资源。您可能想要使用它。

  

在Java中,为什么“finally”块存在,而不是“firstly”块?

顾名思义,catch必须包含清理代码,不能将其放在firstly之前,并称之为某些花哨的finally。即使在Exception块中引发catch,也会执行operator()中的代码。