Java 使用传统的finally块进行空检查以关闭资源

Java 使用传统的finally块进行空检查以关闭资源,java,Java,在调用开放资源的close()之前,网络上有一些检查null的例子 final InputStream in=…;//可以抛出IOException 试一试{ //做点什么。 }最后{ 如果(in!=null){//这确实是必需的吗? in.close(); } } 我总是不检查是否为空 final InputStream in=…;//可以抛出IOException 尝试{//当它到达这一行时,“in”永远不会为空,会吗? //做点什么。 }最后{ in.close();//不需要空检查,我

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

final InputStream in=…;//可以抛出IOException
试一试{
//做点什么。
}最后{
如果(in!=null){//这确实是必需的吗?
in.close();
}
}
我总是不检查
是否为空

final InputStream in=…;//可以抛出IOException
尝试{//当它到达这一行时,“in”永远不会为空,会吗?
//做点什么。
}最后{
in.close();//不需要空检查,我错了吗?
}
可能会返回
null
,这就是为什么会有一个检查


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

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


您所做的事情是正确的。

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


您做的是正确的。

InputStream实现了AutoClosable,因此您可以使用语句。然后,您不必处理null,因为Java会为您这样做

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

InputStream实现了AutoClosable,因此您可以使用语句。然后,您不必处理null,因为Java会为您这样做

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

如果你要“catch”
IOException
,你应该把作业放在一个
try
块中,不是吗?@JinKwon使用
的意思是什么,如果你要“catch”
IOException
,它只是为了缩短键入时间,还是一个Java关键字,你应该把作业放在
try
块中,不是吗?@JinKwon使用
..
的意义是什么,只是为了缩短键入时间还是在Java中是一个关键字使用
..
的意义是什么,只是为了缩短键入时间还是在Java中是一个关键字使用
..
的意义是什么,它只是为了缩短键入时间,还是javaGood catch中的一个关键字。伙计!抢手货伙计!