Java try块和try with resources语句引发异常
考虑以下来自Java文档的代码Java try块和try with resources语句引发异常,java,exception-handling,Java,Exception Handling,考虑以下来自Java文档的代码 static String readFirstLineFromFile(String path) throws IOException { try (**BufferedReader br = new BufferedReader(new FileReader(path))**) { **return br.readLine();** } } 根据Java文档 在readFirstLineFromFile示例中,如果从 try块和
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资源中声明的
语句,无论try语句是否
正常完成或突然完成(由于该方法BufferedReader.readLine引发IOException) (这意味着只有在执行try块之后才会调用close方法…据我所知) 因此,假设try with resources语句和try block抛出异常,并考虑抛出异常的顺序 1)异常首先从
try
blockreturn br.readLine()抛出代码>
2)然后,一旦try块完成(无论是否从try块抛出异常),就会调用缓冲读取器
的close方法,然后它还会抛出异常
因此,理想情况下,从方法readFirstLineFromFile
引发的异常应该是BufferedReader的close方法引发的异常(因为它是最后执行的),而不是从return br.readLine()引发的异常代码>内部try块(与Javadocs中提到的内容相比)
有人能澄清我的疑问吗。你会假设try(){stuff.dude();}
类似于try{stuff.dude();}最后{stuff.close();}
因此,无论成功与否,如果适用,它都会关闭可关闭状态我不明白为什么这会是理想的。我更喜欢得到try块抛出的函数异常,而不是close()方法抛出的技术异常,我对此无能为力。如果异常是IOException,例如,因为文件已被删除,我更希望异常告诉我无法从文件中读取,而不是异常告诉我无法关闭读卡器(这也是由于文件删除引起的)。