Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Модель обработки исключений

Читайте также:
  1. ATTENTION!! тут не описано как проверять партиклы! только модель с текстурами
  2. F) Бинарная модель
  3. Figure 6. Ежедневная оценка числа сотрудников в зависимости от времени обработки запросов и количества инцидентов
  4. G74 Цикл торцевой контурной обработки
  5. III. ДИСТРИБУТИВНАЯ МОДЕЛЬ
  6. Wave 3 – новый флагман платформы bada на свежей версии 2.0. Модель в цельнометаллическом корпусе из анодированного алюминия и с большим (4”) экраном Super AMOLED.
  7. XXII. Модель «К» и отчаянный риск

Обработка исключений в языке Java выполняется с помощью модели обработки исключений (exception-handling model).

При описании обработки применяется бейсбольная терминология. Говорят, что исполняющая система или программа "выбрасывает" (throws) объект-исключение. Этот объект "пролетает" через всю программу, появившись сначала в том методе, где произошло исключение, а программа в одном или нескольких местах пытается (try) его "перехватить" (catch) и обработать. Обработку можно сделать полностью в одном месте, а можно сначала обработать исключение в одном месте, выбросить снова, перехватить в другом месте и обрабатывать дальше.

Для того чтобы попытаться (try) перехватить (catch) объект-исключение, надо весь код программы, в котором может возникнуть исключительная ситуация, охватить оператором try{} catch() {}. Каждый блок catch() перехватывает исключение только одного типа, того, который указан в его аргументе. Но можно написать несколько блоков catch(){} для перехвата нескольких типов исключений.

На практике так называемый блок try-catch оформляется следующим образом:

try {

// Здесь возможно возбуждение исключительной ситуации

}

catch (ТипИсключительнойСитуации) {

// Здесь производится обработка

// перехваченной исключительной ситуации

}

Но не всегда исключительные ситуации - это фатальный сбой. Может, к примеру, оказаться, что программа просто не нашла какой-то файл в каталоге. В этом случае можно перехватить такую ошибку и в обработчик исключительной ситуации вставить оператор вызова диалоговой панели, где пользователь укажет местоположение этого файла. После разрешения этой проблемы программа может быть запущена с того места, где ее выполнение было прервано. Обычно все методы, в которых может возникнуть исключительная ситуация, описываются особым образом. Например:

static void SomeMethod () throws FileNotFoundException {}

В этом описании оператор throws обозначает, что метод потенциально может создать/вызвать исключительную ситуацию FileNotFoundException, поскольку не найден какой-либо файл. Теперь любой вызов этого метода в программе должен быть обрамлен описанием блока try-catch, иначе компилятор выдаст ошибку и не обработает исходный текст вашей программы. Корректное решение проблемы выглядит примерно следующим образом:

try{

..

static void SomeMethod ();

..

}

catch (FileNotFoundException exception){

//Действия по устранению ошибки

}

Например, мы знаем, что в программе могут возникнуть исключения двух типов. Рассмотрим блоки их обработки:

public class SimpleExcept {

public static void main (String[] args){

try{

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

System.out.println("После parseInt()");

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

System.out.println ("После вывода результата");

}

catch(ArithmeticException ae){

System.out.println("Из блока Arithm.Exc.catch: " + ae);

}

catch(ArrayIndexOutOfBoundsException arre){

System.out.println("Из блока Array.Exc.catch: " + arre);

}

finally{

System.out.println("Из блока finally");

}

System.out.println("После всех действий");

}

}

В программу вставлен блок try{} и два блока перехвата catch() для каждого типа исключений. Обработка исключения здесь заключается просто в выводе сообщения и содержимого объекта-исключения, как оно представлено методом toString() соответствующего класса-исключения.

После блоков перехвата вставлен еще один, необязательный блок finally{}. Он предназначен для выполнения действий, которые надо выполнить обязательно, чтобы ни случилось. Все, что написано в этом блоке, будет выполнено и при возникновении исключения, и при обычном ходе программы, и даже если выход из блока try{} осуществляется оператором return.

Если в операторе обработки исключений есть блок finally{}, то блок catch(){} может отсутствовать, т. е. можно не перехватывать исключение, но при его возникновении все-таки проделать какие-то обязательные действия.

Кроме блоков перехвата после каждого действия выводится сообщение, чтобы можно было проследить за порядком выполнения программы. Программа запущена три раза: с аргументом 5, с аргументом 0 и вообще без аргумента. Результат показан на следующем рисунке.

После первого запуска, при обычном ходе программы, выводятся все сообщения.

После второго запуска, приводящего к делению на нуль, управление сразу же передается в соответствующий блок catch(ArithmeticException ае){}, потом выполняется то, что написано в блоке finally{}.

После третьего запуска управление после выполнения метода parseInt() передается в другой блок catch(ArrayIndexOutOfBoundsException arre){}, затем в блок finally{}.

Обратите внимание, что во всех случаях — и при обычном ходе программы, и после этих обработок — выводится сообщение "После всех действий". Это свидетельствует о том, что выполнение программы не прекращается при возникновении исключительной ситуации, а продолжается после обработки и выполнения блока finally{}.

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

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


Дата добавления: 2015-10-29; просмотров: 114 | Нарушение авторских прав


Читайте в этой же книге: Синтаксис языка | Типы данных языка Java | Вещественный тип данных | Поразрядные операторы | Троичный оператор | Операторы цикла do-while, while, for | Оператор continue | Определение методов | Перегрузка конструктора | Абстрактные методы |
<== предыдущая страница | следующая страница ==>
Иерархия классов-исключений| Концепции AWT

mybiblioteka.su - 2015-2024 год. (0.01 сек.)