我有一个可以抛出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();
}发布于 2013-07-28 16:32:42
在第二个例子中,如果抛出异常,你的fis将不会被关闭。一种选择是将可能引发异常的语句包含在try块中,并在finally块中关闭fis。
但是,由于您已经在使用Java7,因此应该使用try-with-resource。
发布于 2013-07-28 16:36:03
无论是否引发异常(Work only java7 onwards),try-(Closeable resources)-resources总是关闭资源。
其中,作为第二个代码,如果出现异常,请不要关闭资源。
因此,如果您使用java7,则可以使用try-with-resources,否则可以使用try和finally块编辑您的代码。
finally block guarantees execution irrespective of exception raises or not
发布于 2013-07-28 16:39:23
如果您热衷于使用第二种方法,那么在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();
}
}https://stackoverflow.com/questions/17906447
复制相似问题