我有一个可以抛出IOException的函数,所以我没有在内部捕获异常。但是我有一些资源要关闭。使用try-with-resource(没有任何catch块)以这种方式做是正确的:
public void workOnFiles() throws IOException {
try(FileInputStream fis = new FileInputStream("bau.txt");) {
// Do some stuff
}
}
或者我应该这样做:
public void workOnFiles() throws IOException {
FileInputStream fis = new FileInputStream("bau.txt");
// Do some stuff
fis.close();
}
答案 0 :(得分:5)
在第二项中,如果抛出异常,您的fis
将不会被关闭。一个选项是附加可以在try
块中抛出异常的语句,并关闭fis
块中的finally
。
但是,由于您已经在 Java 7 ,因此您应该使用try-with-resource。
答案 1 :(得分:0)
try-with-resources总是关闭(Closeable resources)
资源,无论异常是否引发(Work only java7 onwards)
。
如果异常加剧,您的第二个代码不会关闭资源
因此,如果您使用try-with-resources
,则可以使用java7
,或者使用try
和finally
块修改代码。
finally block guarantees execution irrespective of exception raises or not
答案 2 :(得分:0)
如果您热衷于使用第二种方法,请关闭finally
块中的资源。
public void workOnFiles() throws IOException {
FileInputStream fis = null;
try {
fis = new FileInputStream("bau.txt");
// Do some stuff
}
finally {
try {
fis.close();
}
catch(Exception e) {
//logger.error(e);
// e.printStackTrace();
}
}