try-with 功能如何对AutoCloseable
已声明的变量起作用null
?
我认为当它尝试调用close
变量时这会导致空指针异常,但它运行没有问题:
try (BufferedReader br = null){
System.out.println("Test");
}
catch (IOException e){
e.printStackTrace();
}
try-with 功能如何对AutoCloseable
已声明的变量起作用null
?
我认为当它尝试调用close
变量时这会导致空指针异常,但它运行没有问题:
try (BufferedReader br = null){
System.out.println("Test");
}
catch (IOException e){
e.printStackTrace();
}
Java 语言规范在第14.20.3节中指定它仅在非空时关闭。尝试资源:
仅当资源初始化为非空值时才关闭资源。
这实际上是有用的,当一个资源可能有时存在,而其他资源不存在时。
例如,假设您可能有也可能没有某个远程日志记录系统的可关闭代理。
try ( IRemoteLogger remoteLogger = getRemoteLoggerMaybe() ) {
if ( null != remoteLogger ) {
...
}
}
如果引用不为空,则远程记录器代理将关闭,如我们所料。但是,如果引用为 null,则不会尝试对其调用 close(),不会抛出 NullPointerException,并且代码仍然有效。