是否有嵌套尝试/捕获块的首选项?
在Java中使用Reader和Streams时,总是让我烦恼的一件事是,该方法可能会引发异常。由于将 close 方法放在最终块中是个好主意,因此需要一些尴尬的情况。我通常使用这种结构:close()
FileReader fr = new FileReader("SomeFile.txt");
try {
try {
fr.read();
} finally {
fr.close();
}
} catch(Exception e) {
// Do exception handling
}
但我也看到了这种结构:
FileReader fr = new FileReader("SomeFile.txt");
try {
fr.read()
} catch (Exception e) {
// Do exception handling
} finally {
try {
fr.close();
} catch (Exception e) {
// Do exception handling
}
}
我更喜欢第一个结构,因为只有一个捕获块,它看起来更优雅。有没有理由实际上更喜欢第二种或另一种结构?
更新:如果我指出两者并且只抛出IOExceptions,会有什么不同吗?因此,在我看来,如果读取失败,则关闭将因同样的原因而失败。read
close