Я знаю, что на самом деле это не так, и исключение попытки с ресурсами
при закрытии можно поймать.
Право, а также на инициализацию ресурса.
Я думаю, что расширенная часть JLS"попытка с ресурсами" может помочь переформулировать это довольно неловкое объяснение.
Хотя это довольно правильно для части, касающейся утверждения finally
.
Мы могли бы сказать, что:
Оператор catch
в операторе try-with-resources позволяет перехватить совместимое исключение, выброшенное в любой части этого оператора, то есть 1) во время инициализации ресурса, 2) во время закрытия ресурса любого ресурс или 3) с помощью операторов, выполняемых в теле try-with-resources .
Что касается оператора finally
, он будет выполнен после того, как ресурсы были закрыты (или попытались быть).
Ссылка:
14.20.3.2. Расширенная попытка с ресурсами
Оператор try-with-resources с хотя бы одним предложением catch
и / или
finally
предложение называется расширенным оператором try-with-resources.
Значение расширенного оператора try-with-resources:
try ResourceSpecification
Block
Catchesopt
Finallyopt
дается следующим переводом в базовую попытку с ресурсами
заявление (§14.20.3.1), вложенное в try-catch
или try-finally
или
try-catch-finally
оператор:
try {
try ResourceSpecification
Block
}
Catchesopt
Finallyopt
Эффект от перевода поставить ResourceSpecification
«внутри» оператора try
. Это позволяет catch
предложение расширенного
оператор try-with-resources для перехвата исключения из-за
автоматическая инициализация или закрытие любого ресурса.
Кроме того, все ресурсы будут закрыты (или попытались
закрыт) к моменту выполнения блока finally
в соответствии с
намерение ключевого слова finally
.