看到如下代码块
static String readFirstLineFromFileWithFinallyBlock(String path) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
if (br != null) br.close();
}
}
这里为何要有 try finally ?
1
hamasaki1999 2017-08-15 14:47:29 +08:00
他不是已经抛出 IOException 了吗
|
2
georgetso 2017-08-15 14:47:49 +08:00
不需要处理异常,但要做清洁工作的情况。
|
3
microhz 2017-08-15 15:31:40 +08:00
finally 一般做一些必要的资源释放,例如流的关闭和锁的释放。只要不是编译异常,不一定非要 catch
|
4
Arthur5 2017-08-15 15:38:48 +08:00 via Android
异常要不直接捕获处理,要不接着往上抛出去。这个方法是直接抛出去了(第一行 throws IOException )所以没有 catch
|
5
loryyang 2017-08-15 15:53:00 +08:00
遇到异常不一定需要 catch,也可以往外 throw,让外面去 catch
这里用 try 是为了 finally 释放资源,而不是要 catch |
6
Magic347 2017-08-15 16:49:37 +08:00
补一个深度剖析 finally 语句块的链
https://www.ibm.com/developerworks/cn/java/j-lo-finally/ |
7
JackyBao 2017-08-15 16:55:37 +08:00 via Android
br 不会自动释放吗?
|
8
ke1e 2017-08-15 16:59:09 +08:00 via Android
一般用于释放资源
|
9
liuzhen 2017-08-15 17:02:29 +08:00
try 块表示可能出异常的代码块
catch 块表示异常出现时怎么处理 finally 块表示不管正常或者异常最终都会执行的代码块 |