在java中尝试捕获块之后使用“finally”有什么好处?[已关闭]

2022-09-01 00:39:09

“finally”块总是在 try-catch 结束时执行,无论是否出现异常。但是,在尝试捕获之外和之后的每一行代码也始终被执行。那么,我为什么要使用 finally 语句呢?

例:

try {
    //code...
} catch (Exception e) {
    //code...
} finally {
    System.out.println("This line is always printed");
}
System.out.println("Also this line is always printed !! So why to use 'finally'?? ");

答案 1

最有用的情况是当你需要释放一些资源时:

InputStream is = ...
try {
    //code...
} catch (Exception e) {
    //code...
} finally {
    is.close();
}

更一般地说,当您想要确保代码在最后执行时,即使执行期间出现异常,也可以使用它:

long startTime = System.currentTimeMillis();
try {
    //code...
} catch (Exception e) {
    //code...
} finally {
    long endTime = System.currentTimeMillis();
    System.out.println("Operation took " + (endTime-startTime) + " ms");
}

这个块总是被执行的想法是,对于整个块后面的第一行来说,情况并非如此。finally

  • 如果块允许一些可投掷的传递catch
  • 如果它重新抛出一个例外,这是非常频繁的

答案 2

最后一个(在最后一个块之后)只有在 try 块中抛出的异常被捕获时才会运行,并且执行没有被例如 return 语句中断。System.out.println

在您的示例中,finally 块将始终运行,但如果 try 块中未抛出 no(它不会被捕获),如果 catch 块中未抛出 no 并且没有其他语句,则执行将仅继续通过 finally 块,这将中断执行。ErrorThrowable


推荐