Иллюстрированный самоучитель по Java
Оператор
throw
Этот оператор очень прост: после
слова throw через пробел записывается объект класса-исключения. Достаточно часто
он создается прямо в операторе throw, например:
throw new ArithmeticException();
Оператор можно записать в любом
месте программы. Он немедленно выбрасывает записанный в нем объект-исключение
и дальше обработка этого исключения идет как обычно, будто бы здесь произошло
деление на нуль или другое действие, вызвавшее исключение класса ArithmeticException.
Итак, каждый блок catch о и перехватывает
один определенный тип исключений. Если требуется одинаково обработать несколько
типов исключений, то можно воспользоваться тем, что классы-исключения образуют
иерархию. Изменим еще раз листинг 16.2, получив листинг 16.5.
Листинг 16.5.
Обработка нескольких типов исключений
class SimpleExt4(
public static
void main(String[] args){
try{
int n = Integer.parselnt(args[0]);
System.out.println("After
parselnt());
System.out.println("
10 / n = " + (10 / n) ) ;
System.out.println("After
results output");
}catch(RuntimeException
ae){
System.out.println("From
Run.Exc. catch: "+ae);
}finally{
System.out.println("From
finally");
}
System.out.println("After
all actions");
}
}
В листинге 16.5 два блока catch()
{} заменены одним блоком, перехватывающим исключение класса RuntimeException.
Как видно на рис. 16.4, этот блок перехватывает оба исключения. Почему? Потому
что это исключения подклассов класса RuntimeException.
Рис. 16.4.
Перехват нескольких типов исключений
Таким образом, перемещаясь по иерархии
классов-исключений, мы можем обрабатывать сразу более или менее крупные совокупности
исключений. Рассмотрим подробнее иерархию классов-исключений.