Java 没有最终结果的尝试/捕获是坏的吗

Java 没有最终结果的尝试/捕获是坏的吗,java,try-catch,finally,Java,Try Catch,Finally,所以我知道不管异常如何,finally代码块都会执行,但不使用它是否不好?我一直在使用justtry/catch,我想知道这是否是一种糟糕的做法。或者这真的不重要吗?如果你最后没有任何需要清理的东西,那就很好了最后块几乎总是关于资源清理。。。很多时候,你想捕捉一个异常,却没有任何资源来清理 话虽如此,但只有当您能够实际处理异常或希望将异常包装为更合适的类型时,才能捕获异常。我的经验是,catch块应该比try/finally或try with resources块少很多。如果您发现自己在大多数方

所以我知道不管异常如何,
finally
代码块都会执行,但不使用它是否不好?我一直在使用just
try/catch
,我想知道这是否是一种糟糕的做法。或者这真的不重要吗?

如果你最后没有任何需要清理的东西,那就很好了<代码>最后块几乎总是关于资源清理。。。很多时候,你想捕捉一个异常,却没有任何资源来清理


话虽如此,但只有当您能够实际处理异常或希望将异常包装为更合适的类型时,才能捕获异常。我的经验是,catch块应该比try/finally或try with resources块少很多。如果您发现自己在大多数方法中捕捉到异常,这可能表明您误用了它们。

简短回答,否。这完全取决于try块中发生的情况。我想说的是,你大部分的试捕可能最终都不需要。但是,当您打开try块中的资源(如文件、流、网络等)时,需要关闭(无论是否引发异常)

当您有可能生成错误的代码时,请将此代码放入
try/catch
中。当我们最后添加
时,
是运行不依赖于上面捕获的错误的代码


PS:
'finally'
中包含的代码行总是被执行的。

细分和Jon的答案很好,但我只想补充一下关于
finally
块如何工作的常见误解,主要是对这个常见问题的回答:

将代码放在
最后
块与在
捕获
块之后立即将其保留有什么区别?

回答不正确:如果出现异常,将不会执行
catch
块后的代码,除非您将其放入
finally
块中

如果这是错误的,为什么我们最终需要

首先,只要您适当地处理所有异常,那么
catch
后面的代码将运行,这意味着任何异常都不应逃脱未处理的
try..catch
<另一方面,code>finally将几乎始终运行,即使在未处理的异常逃逸
try..catch的情况下也是如此。我说“几乎”,因为一些未处理的异常可能会跳过
finally
块,但这很少见

另一个区别是:如果在
try
catch
块中退出代码,则
catch
块后的代码将不运行。我们可能认为这是显而易见的,但有时可能很棘手。示例:
return
break
continue
(如果您的
try
和后面的代码处于循环中),
throw
(如果您在
catch
中使用它来重新向调用方抛出异常)<代码>最后
仍将在所有这些条件下执行

最后要考虑的一件事是:使用
finally
可以清楚地表明您的意图,因此它有助于生成更健壮、更自解释的代码。如果您仔细处理上述所有条件,并在
catch
之后编写代码,认为它可以像
finally
块一样运行,那么您可能就没事了。。。。好的,直到另一个开发人员将来需要修改您的代码并决定在
中添加
return
(例如)try


结论:如果您有代码需要在您的
try..catch
之后保证其执行,则始终建议使用
finally

什么是
finally
?Java文档回答了您的问题@OliverCharlesworth无论是否抛出异常错误,finally块中的代码都将执行,如果在catch块之后编写代码而不使用finally,那么如果抛出异常,它将不会执行这就是我的想法。我在try块中声明/打开一个连接,并希望在finally中关闭它,但connection变量的作用域不会让这种情况发生。我想我也可以在try中关闭它,这就是我问这个问题的原因。但是你的连接变量不是在try块之外声明的吗?在try块中声明和关闭连接变量是不安全的,因为如果在初始化连接和在try中关闭连接之间引发异常,则连接将保持打开状态!您需要做的是在try块之前将连接变量声明为=null,然后在try块中初始化它。在最后一块,你必须检查变量是否为null,如果不是,那么关闭它。啊,我明白了。我在声明块内的连接,并尝试将作用域保留到该块。相反,我应该只在try和declare中进行初始化。感谢您的输入Racil,因此即使没有finally块,您的代码也几乎总是在正确处理catch给定的异常之后执行。Finally是一种更健壮的方法,用于在捕获后处理代码。不客气。如果你觉得答案有帮助的话,请随意投票。