Оператор 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. Как видно этот блок перехватывает оба исключения. Почему? Потому что это исключения подклассов класса RuntimeException.

Таким образом, перемещаясь по иерархии классов-исключений, мы можем обрабатывать сразу более или менее крупные совокупности исключений. Рассмотрим подробнее иерархию классов-исключений.