1) В приведенном выше примере кода (то есть ресурс не смог
инициализировать) не подпадают под сценарий .. ресурс будет закрыт
независимо от того, завершается ли оператор try нормально или
внезапно . Это применимо только для инициализированных ресурсов
успешно в попытке с оператором ресурсов и есть ошибка в
блок try?
Неясно, на что вы ссылаетесь с помощью "ресурс будет закрыт независимо от того, завершается ли оператор try нормально или внезапно". Тем не менее, если попытка инициализации ресурса в спецификации ресурса выдает исключение, то нет, этот ресурс не закрыт, поскольку он не был инициализирован с ненулевым значением (ваша вторая точка маркера, которая является выдержкой из текста JLS) .
Если бы в спецификации ресурса было несколько ресурсов, некоторые из них могли бы быть инициализированы до инициализации одного из их бросков; в этом случае те, которые были успешно инициализированы к ненулевым значениям, закрываются.
2) Если при инициализации ресурсов возникают исключения (например,
пример), это попадет под неудачный сценарий инициализации.
В этом случае, как мы сталкиваемся со сценарием исключения
в операторе try-with-resources (который может произойти
во время инициализации) вообще? Это исключения, выброшенные в то время как
закрытие ресурса?
Оператор try-with-resources является составным оператором, охватывающим все, начиная с исходного ключевого слова try
, вплоть до связанного блока, и включая любые предложения catch
и и finally
. Основное внимание уделяется правильной очистке в случае возникновения исключения изнутри блока try
. Биты в спецификации о случаях, когда возникает исключение во время инициализации ресурса, могут быть поняты с точки зрения эквивалентности между оператором try-with-resources N и вложенным одиночным N операторы try-with-resources для ресурса.
Также обратите внимание, что JLS представляет перевод оператора try-with-resources в эквивалентный код с использованием традиционного try
/ catch
/ finally
и явного закрытия ресурса. Это хороший ресурс для рассмотрения, если вы боретесь с семантикой try-with-resources.