Это вопрос стиля кода. Я замечаю много примеров кода, включая некоторые примеры из Oracle, чтобы поток был закрыт следующим образом:
InputStream in = null;
try {
in = acquireStream();
...
} finally {
if (in != null) in.close();
}
Обратите внимание на инициализацию на null и проверьте значение null в блоке finally.
Я обычно пишу код следующим образом:
InputStream in = acquireStream();
try {
...
} finally {
in.close();
}
Есть ли преимущества или недостатки любого подхода? Мне нравится мой стиль, потому что мне не нужна нулевая проверка. Также мне нравится избегать null, когда это возможно. Но поскольку стиль Oracle настолько распространен в онлайн-примерах, мне интересно, есть ли у моей скрытая ошибка.
Я задаю один и тот же вопрос для InputStream, OutputStream, java.sql.Connection, java.sql.PreparedStatement и т.д. Я, как правило, приобрел ресурс вне блока try, а затем закрою его в finally без нулевого проверить. Есть ли что-то, что я упускаю, кроме стилистических различий?
Спасибо.