Спецификация 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.
Читайте также:
- Спецификация Java 11: 11.1.3. Асинхронные исключения
- Спецификация Java 11: 11.2. Проверка исключений во время компиляции
- Спецификация Java 11: 11.2.1. Анализ исключений в выражениях
Комментарии
Отправить комментарий