Описание исключительной ситуации


В классе 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;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.009 сек.