Java 有 try finally,没有 catch 的语句是什么意思?

2017-08-15 14:43:47 +08:00
 guyeuro

看到如下代码块

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 ?

3000 次点击
所在节点    问与答
9 条回复
hamasaki1999
2017-08-15 14:47:29 +08:00
他不是已经抛出 IOException 了吗
georgetso
2017-08-15 14:47:49 +08:00
不需要处理异常,但要做清洁工作的情况。
microhz
2017-08-15 15:31:40 +08:00
finally 一般做一些必要的资源释放,例如流的关闭和锁的释放。只要不是编译异常,不一定非要 catch
Arthur5
2017-08-15 15:38:48 +08:00
异常要不直接捕获处理,要不接着往上抛出去。这个方法是直接抛出去了(第一行 throws IOException )所以没有 catch
loryyang
2017-08-15 15:53:00 +08:00
遇到异常不一定需要 catch,也可以往外 throw,让外面去 catch
这里用 try 是为了 finally 释放资源,而不是要 catch
Magic347
2017-08-15 16:49:37 +08:00
补一个深度剖析 finally 语句块的链
https://www.ibm.com/developerworks/cn/java/j-lo-finally/
JackyBao
2017-08-15 16:55:37 +08:00
br 不会自动释放吗?
ke1e
2017-08-15 16:59:09 +08:00
一般用于释放资源
liuzhen
2017-08-15 17:02:29 +08:00
try 块表示可能出异常的代码块
catch 块表示异常出现时怎么处理
finally 块表示不管正常或者异常最终都会执行的代码块

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/383095

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX