Ответ 1
Спецификация языка Java указывает, что она закрыта только в том случае, если она не равна нулю, в разделе 14.20.3. примерочных с-ресурсы:
Ресурс закрывается, только если он инициализируется ненулевым значением.
Это может быть полезно, когда ресурс может иногда присутствовать, а другие отсутствуют.
Например, скажем, у вас может быть или не быть закрытого прокси-сервера для какой-либо удаленной системы ведения журнала.
try ( IRemoteLogger remoteLogger = getRemoteLoggerMaybe() ) {
if ( null != remoteLogger ) {
...
}
}
Если ссылка не равна нулю, прокси-сервер удаленного журнала закрывается, как мы и ожидаем. Но если ссылка имеет значение null, не делается попытки вызвать на ней функцию close(), не возникает исключение NullPointerException, и код все еще работает.