Что происходит, когда попытка использования ресурса вызывает исключение, которое перехватывается снаружи? Будет ли еще проводиться очистка?
Образец:
public void myClass() throws customException {
try (Connection conn = myUtil.obtainConnection()) {
doSomeStuff(conn);
if (someCheck)
throw new customException(somePara);
doSomeMoreStuff(conn);
conn.commit();
} catch (SQLException e) {
log.error(e);
}
}
Меня больше всего интересует, когда выбрасывается customException. Я не ловлю это исключение с помощью улова моей попытки с ресурсом. Поэтому мне интересно, будет ли выполняться очистка соединения в этом сценарии.
Или мне нужно поймать и перебросить соединение, например:
public void myClass() throws customException {
try (Connection conn = myUtil.obtainConnection()) {
doSomeStuff(conn);
if (someCheck)
throw new customException(somePara);
doSomeMoreStuff(conn);
conn.commit();
} catch (SQLException e) {
log.error(e);
} catch (customException e) {
throw new customException(e);
}
}
close()
ресурса, независимо от того, поймаете вы исключение или нет. Нет необходимости перехватывать и повторно выбрасывать исключение. - person Jesper   schedule 28.08.2019catch
иthrow new
? плюс, когда вы пытаетесь использовать ресурсы, вам не нужно закрывать поток вручнуюclose()
будет вызываться автоматически - person Phill Alexakis   schedule 28.08.2019catch
, ни в блокеfinally
в atry-with-resources
. - person daniu   schedule 28.08.2019