考虑来自Java Docs的以下代码。
static String readFirstLineFromFile(String path) throws IOException {
try (**BufferedReader br = new BufferedReader(new FileReader(path))**) {
**return br.readLine();**
}
}
根据Java文档,
在示例readFirstLineFromFile中,如果抛出异常 try块和try-with-resources语句,然后是 方法readFirstLineFromFile抛出从try抛出的异常 块; try-with-resources块抛出的异常是 抑制。
另一方面,也提到了
因为BufferedReader实例是在try-with-resource中声明的 声明,无论是否是try语句,它都将被关闭 正常或突然完成(由于方法的原因) BufferedReader.readLine抛出IOException)。
(这意味着只有在执行try块后才调用close方法......根据我的理解)
因此,假设try-with-resources语句和try块抛出异常并考虑抛出异常的顺序
1)异常首先从try
块return br.readLine();
2)然后,一旦try块完成(无论是否从try块抛出异常),都会调用Buffered Reader
的close方法,然后它也会被调用抛出exception
。
因此,理想情况下,方法readFirstLineFromFile
抛出的异常应该是BufferedReader的close方法(因为它是最后执行的)而不是来自try块内的return br.readLine();
的异常(与之相比) Javadocs中提到的内容)
有人可以澄清我的疑问。
答案 0 :(得分:0)
您认为try(<<stuff>>){stuff.dude();}
类似于try{stuff.dude();}finally{stuff.close();}
。
成功或失败时,如果适用,它会关闭可关闭的