Java try块和try with resources语句引发异常

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块和

考虑以下来自Java文档的代码

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
block
return 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,例如,因为文件已被删除,我更希望异常告诉我无法从文件中读取,而不是异常告诉我无法关闭读卡器(这也是由于文件删除引起的)。