Спецификация Java 11: 11.2.2. Анализ утверждений исключений

Оператор throw, выброшенное выражение которого имеет статический тип E и не является окончательным (final) или фактически конечным (effectively final) параметром исключения, может вызывать E или любой класс исключения, который может вызвать выброшенное выражение.

Например, оператор throw new java.io.FileNotFoundException(); может генерировать только java.io.FileNotFoundException. Формально это не тот случай, когда он "может генерировать" подкласс или суперкласс java.io.FileNotFoundException.

Оператор throw, выброшенное выражение которого является конечным или фактически конечным параметром исключения в предложении catch C, может вызывать класс исключения E, если и только если:

  • E - это класс исключения, который может выбросить блок try оператора try, который объявляет C; и
  • E - это присваивание, совместимое с любым из перехватываемых классов исключений C; и
  • E не совместим по присваиванию ни с одним из ловимых классов исключений в предложениях catch, объявленных слева от C в том же операторе try.

Оператор try может вызвать исключение класса E, если:

  • Блок try может генерировать E, или выражение, используемое для инициализации ресурса (в инструкции try-with-resources), может генерировать E, или автоматический вызов метода close() ресурса (в try-with-resources оператор) может генерировать E, и E не является совместимым по присваиванию ни с одним классом исключения, который можно перехватить, в любом предложении catch оператора try, и либо блок finally отсутствует, либо блок finally может завершиться нормально; или же
  • Некоторый блок catch оператора try может выдать E, и либо блок finally отсутствует, либо блок finally может завершиться нормально; или же
  • Блок finally присутствует и может бросить E.

Явный оператор вызова конструктора может вызвать исключение класса E, если и только если:

  • Некоторое выражение списка параметров вызова конструктора может вызывать E; или же
  • E определяется как класс исключения для вызываемого конструктора throws.

Любой другой оператор S может вызвать исключение класса E, если выражение или оператор, непосредственно содержащиеся в S, могут вызвать класс исключения E.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки