Описание исключительной ситуации
В классе Throwable переопределяется метод toString(), который, как известно, определен в общем суперклассе Object, причем переопределяется он так, что в качестве результата возвращает строку, описывающую соответствующую ошибку. Напомним, что метод toString() вызывается автоматически, например, при передаче объекта исключения методу println() в качестве аргумента. Соответствующий пример приведен в листинге 3.
Листинг 3.Описание ошибки
class MoreExceptionDemo{
public static void main(String args[]){
int a,b;
try{
b=0;
// Деление на ноль:
a=100/b;
}catch(ArithmeticException e){
// При обработке ошибки использован объект исключения:
System.out.println("Ошибка: "+e);}
System.out.println("Выполнение программы продолжено!");}
}
По сравнению с рассмотренным ранее особенность этого примера состоит в том, что в команде System.out.println("Ошибка: "+e) в качестве аргумента методу println() передается объект исключительной ситуации e. Результат выполнения программы в этом случае имеет такой вид:
Ошибка: java.lang.ArithmeticException: / by zero
Выполнение программы продолжено!
В первой текстовой строке, выведенной на экран, текст после слова Ошибка: появился в результате преобразования объекта исключения e в текстовый формат.
Множественный блок catch{}
Как отмечалось в начале лекции, для каждого типа исключений можно предусмотреть свой блок catch для обработки. Блоки размещаются один за другим и им передаются разные аргументы (объекты исключений разных классов) в соответствии с типом обрабатываемой исключительной ситуации. В листинге 4 приведен пример программы, в которой помимо ошибки деления на ноль обрабатывается также и ошибка неверной индексации массива.
Листинг 4.Несколько блоков catch
import java.util.Random;
class MultiCatchDemo{
public static void main(String args[]){
Random r=new Random();
int MyArray[]={0,2};
int a,b;
for(int i=1;i<10;i++){
try{
a=r.nextInt(3);
b=10/MyArray[a];
System.out.println(b);
}catch(ArithmeticException e){
System.out.println("Деление на ноль!");}
catch(ArrayIndexOutOfBoundsException e){
System.out.println("Выход за границы массива!");}
Множественный блок catch{} 269
finally{System.out.println("**************");}}
System.out.println("Цикл for завершен!");}
}
Как и в одном из предыдущих примеров, здесь используется генератор случайных чисел, для чего командой import java.util.Random импортируется класс Random, а с помощью команды Random r=new Random() создается объект r этого класса для генерирования случайных чисел. Кроме того, создается целочисленный массив MyArray из двух элементов (значения 0 и 2), также описываются две целочисленные переменные a и b.
В цикле командой a=r.nextInt(3) присваивается значение переменной a — случайное целое число в диапазоне от 0 до 2 включительно. Переменная a, другими словами, может принимать значения 0, 1 и 2. Далее командой b=10/MyArray[a] присваивается значение переменной b. При выполнении этой команды могут возникать неприятности двух видов. Во-первых, если значение переменойa равно 0, то выполняется деление на ноль, поскольку элемент массива MyArray[0] равен нулю. Во-вторых, если значение переменой a равно 2, то имеет место ошибка выхода за границы массива, поскольку элемента MyArray[2] не существует.
Если же значение переменной a равно 1, то значение переменной b вычисляется как 5 и выводится на экран командой System.out.println(b).
Для обработки ошибки деления на ноль используется блок catch с аргументом класса ArithmeticException. В этом случае выводится сообщение о том, что произошла попытка деления на ноль.
Исключительная ситуация, связанная с неправильной индексацией элементов массива, описывается исключением класса ArrayIndexOutOfBoundsException. Аргумент этого класса передается во второй блок catch. Обработка этой ошибки сводится к тому, что выводится сообщение о выходе за границы массива.
Наконец, блок finally содержит команду вывода разделительной «звездной линии», которая отображается независимо от того, произошла какая-либо ошибка или нет. Результат выполнения программы мог бы выглядеть следующим образом:
Выход за границы массива!
**************
Деление на ноль!
**************
Выход за границы массива!
**************
5
**************
Деление на ноль!
**************
5
**************
Выход за границы массива!
270 Глава 9. Обработка исключительных ситуаций
**************
5
**************
Выход за границы массива!
**************
Цикл for завершен!
В конце работы программы выводится сообщение о том, что работа цикла завершена.
Дата добавления: 2016-06-22; просмотров: 1301;