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



              

Блоки перехвата исключения - часть 3


При записи блоков обработки исключений надо совершенно четко представлять себе, как будет передаваться управление во всех случаях. Поэтому изучите внимательно рис. 16.2.

Интересно, что пустой блок catch (){}, в котором между фигурными скобками нет ничего, даже пробела, тоже считается обработкой исключения и приводит к тому, что выполнение программы не прекратится. Именно так мы "обрабатывали" исключения в предыдущих главах.

Немного выше было сказано, что выброшенное исключение "пролетает" через всю программу. Что это означает? Изменим программу листинга 16.2, вынеся деление в отдельный метод f (). Получим листинг 16.3.

Листинг 16.3.

Выбрасывание исключения из метода

class SimpleExt2{

private static void f(int n){

System.out.println(" 10 / n = " + (10 / n)); 

}

public static void main(String[] args){ 

try{

int n = Integer.parselnt(args[0]); 

System.out.println("After parselnt()); 

f (n);

System.out.println("After results output"); 

}catch(SrithmeticException ae){

System.out.println("From Arithm.Exc. catch: "+ae); 

}catch(ArraylndexQutOfBoundsException arre){

System.out.println("From Array.Exc. catch: "+arre); 

}finally{

System,out.println("From finally"); 

}

System.out.println("After all actions"); 

}

}

Откомпилировав и запустив программу листинга 16.3, убедимся, что вывод программы не изменился, он такой же, как на рис. 16.2. Исключение, возникшее при делении на нуль в методе f (), "пролетело" через этот метод, "вылетело" в метод main (), там перехвачено и обработано.




Содержание  Назад  Вперед