Java try catch 最后似乎毫无意义

leq*_*eqo 1 java try-catch-finally

这是一个非常愚蠢的问题,但我不明白 catch 和 finally 的组合使用。据我所知,无论是否引发异常,catch 块之后的代码都会执行,那么为什么要使用

try
{
    doSomething();
}
catch(Exception e)
{
    e.printStackTrace();
}
finally
{
    doSomethingInFinally();
}
Run Code Online (Sandbox Code Playgroud)

代替

try
{
    doSomething();
}
catch(Exception e)
{
    e.printStackTrace();
}

doSomethingInFinally();
Run Code Online (Sandbox Code Playgroud)

?我总是看到人们使用第一种模式,但我认为这是额外的代码。

Sle*_*idi 5

有些情况下你的建议不起作用

  • 根本没有catch语句(如果抛出异常,该方法将不会继续执行)。

  • catch 块重新抛出异常。

  • try块中有一个return语句。
  • catch 语句不处理超类型异常(就像Throwable您的情况一样)。