Иллюстрированный самоучитель по Java

Порядок обработки исключений

Блоки catch () {} перехватывают исключения в порядке написания этих блоков. Это правило приводит к интересным результатам.

В листинге 16.2 мы записали два блока перехвата catch () {} и оба блока выполнялись при возникновении соответствующего исключения. Это происходило по тому, что классы-исключения ArithmeticException и ArrayindexOutofBoundsException находятся на разных ветвях иерархии исключений.

Иначе обстоит дело, если блоки catch() {} перехватывают исключения, расположенные на одной ветви. Если в листинге 16.4 после блока, перехватывающего RuntimeException, поместить блок, обрабатывающий выход индекса за пределы:

try{
// Операторы, вызывающие исключения
}catch(RuntimeException re){
// Какая-то обработка
}catch(ArrayindexOutofBoundsException ae){
// Никогда не будет выполнен!
}

…то он не будет выполняться, поскольку исключение этого типа является, к тому же, исключением общего типа RuntimeException и будет перехватываться Предыдущим блоком catch () {}.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.