Будет ли блок catch подкласса перехватывать проверенное родительское исключение?

java checked-exceptions

3409 просмотра

1 ответ

85 Репутация автора

У меня есть метод с проверенным исключением для родительского класса, который может генерировать исключения типа parent и subclass

public void method() throws ParentException {
    if( false ) throw new ParentException();
    else if( true ) throw new ChildException(); // this one is thrown
}

и у меня есть каскадный блок catch, который сначала имеет дочернее исключение

try {
    method();
} catch (ChildException e) {
    // I get here?
} catch (ParentException e) {
    // or here?

}

Какой блок будет ловить выброшенное исключение? Поскольку метод явно объявляет только ParentException, будет ли ChildException отображаться как экземпляр ParentException?

Автор: Sajhu Источник Размещён: 18.07.2016 04:50

Ответы (1)


10 плюса

87155 Репутация автора

catchБлок всегда будет поймать наиболее конкретное исключение из имеющегося в его распоряжении , работает свой путь от иерархии наследования.

Я должен подчеркнуть, что ваши блоки catch должны быть в порядке иерархии наследования; то есть вы не можете объявить catchблок с ParentExceptionпоследующим ChildException, так как это ошибка компиляции. То, что у вас там (с точки зрения catchблоков) является действительным.

Более распространенный вариант использования этого - при обработке файлового ввода-вывода; Вы можете сначала поймать FileNotFoundException, IOExceptionесли ошибка будет менее конкретной, чем FileNotFoundException.

Автор: Makoto Размещён: 18.07.2016 04:52
Вопросы из категории :
32x32