null检查传统的finally块以关闭资源

时间:2013-05-06 01:25:08

标签: java

在为开放资源调用null之前,网上有一些示例检查close()

final InputStream in = ...; // may throw IOException
try {
    // do something.
} finally {
    if (in != null) { // this is really required?
        in.close();
    }
}

我总是在没有null-checking-if的情况下完成。

final InputStream in = ...; // may throw IOException
try {                  // when it reached to this line 'in' is never null, could it be?
    // do something.
} finally {
    in.close(); // no null check required, am i wrong?
}

3 个答案:

答案 0 :(得分:2)

如果资源在任何代码执行路径中都不可能成为null,则无需进行空检查。

你做对了。

答案 1 :(得分:1)

final InputStream in = ...;

...可能会返回null,这就是检查的原因。

答案 2 :(得分:1)

InputStream实现AutoClosable,因此您可以使用try-with-resources语句。然后你不必处理null,因为Java会为你做这件事。

try (InputStream in = ...) {
    [some code]
}