【发布时间】:2016-08-20 08:08:33
【问题描述】:
今天在大学里,我们谈到了try、catch 和finally。
我对这两个例子感到困惑:
PrintWriter out = null;
try {
out = new PrintWriter(...); // We open file here
} catch (Exception e) {
e.printStackTrace();
} finally { // And we close it here
out.close();
}
在finally 中关闭文件和我们只是这样做有什么区别:
PrintWriter out = null;
try {
out = new PrintWriter(...); // We open file here
} catch (Exception e) {
e.printStackTrace();
}
out.close();
catch 之后的这段代码会一直执行。
你能给我一些很好的例子来说明我们使用finally和我们把代码放在catch之后的区别吗?我知道 finally 会一直执行,但是程序也会在 catch 块之后继续运行。
【问题讨论】:
-
如果你的 catch 做了类似抛出另一个(可能未经检查的)异常的事情怎么办?
out.close()会在那种情况下运行吗?换句话说,仅仅打印堆栈跟踪并继续前进并不总是处理异常的方式。 -
如果你重新抛出异常,或者没有全部捕获,那么 finally 块就是你的朋友。还有不是Exceptions的Throwable条件,那么第二个例子就会有问题。
-
我即将开始学习 Throwable,所以我想我需要先学习它才能理解这一点,对吧?
-
另外:catch
Exception通常是个坏主意。您应该捕获最具体的异常类型。 -
没人在谈论AutoCloseable!!
标签: java exception exception-handling try-catch finally