2016-07-18 5 views
-5

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

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

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

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

} 

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

+0

Почему в мире этот вопрос имеет так много downvotes? –

ответ

2

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

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

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

+0

, так это было бы в первом, выполняя что-то вроде внутреннего экземпляра? – Sajhu