Elv*_*win 9 java exception finally bufferedreader
所以我在这里有一些代码,我不确定如果reader.close()方法抛出异常,它会如何反应.
public void someMethod(String s) throws IOException{
BufferedReader reader = Files.newBufferedReader(filePath,cs);
listRWLock.readLock().lock();
try{
//miscellaneous code involving reading
}finally{
reader.close()
listRWLock.readLock().unlock()
}
}
Run Code Online (Sandbox Code Playgroud)
ListRWLock是一个ReentrantReadWriteLock.如果reader.close()方法抛出异常,那么它之后的语句是否会无法执行?我已经尝试搜索这个主题了,虽然我已经得到了一些关于在return语句中最终执行的东西,但是我还没有设法找到如果在finally块中抛出异常会发生什么的细节.
提前致谢.
基本上,finally 子句是为了确保资源的正确释放。但是,如果在finally 块内抛出异常,则该保证就会消失。
没有真正简洁的解决方案的一个问题是finally 块中的代码本身可能会引发异常。在这种情况下,finally 块中的异常将从异常中抛出,而不是 try 块内发生的任何异常。由于finally块中的代码旨在成为“清理”代码,因此我们可以决定将那里发生的异常视为次要的,并放置一个显式的catch:
public int readNumber(File f) throws IOException, NumberFormatException {
BufferedReader br = new BufferedReader(new
InputStreamReader(new FileInputStream(f), "ASCII"));
try {
return Integer.parseInt(br.readLine());
} finally {
try { br.close(); } catch (IOException e) {
// possibly log e
}
}
}
Run Code Online (Sandbox Code Playgroud)
关于finally 块还需要注意一些其他事项: