Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2-й семестр / Лекции / Тема 5. Обработка исключений в С++, Java и C#.ppt
Скачиваний:
137
Добавлен:
12.03.2016
Размер:
1.36 Mб
Скачать

Обработка исключений в Java

Иерархия классов-исключений Java. Типы исключений в Java.

19

Обработка исключений в Java

Объект-исключение в Java – это объект класса исключения (стандартного или пользовательского).

В Java существует целая иерархия стандартных классов исключений (см. слайд).

Все исключения в Java имеют общего предка – класс Throwable. Он имеет два важных подкласса - Exception и Error. Исключения (Exceptions) являются результатом возникших внутри программы проблем, которые в принципе решаемы и предсказуемы. Ошибки (Errors) представляют собой более серьёзные проблемы, которые, согласно спецификации Java, не следует пытаться перехватить в приложении, написанном достаточно рационально (например ошибка OutOfMemoryError происходит в тех случаях, когда JVM не хватает памяти для выполнения программы). Кроме того, у класса Exception есть важный потомок - RuntimeException (исключение времени выполнения). Этот класс и его потомки представляют собой исключения, которые возникают во время "нормальной работы Java-машины" (примерами таких исключений являются попытки использования нулевых ссылок на объекты, деления на ноль или выход за границы массива).

В Java все исключения делятся на три типа: контролируемые исключения(checked), ошибки (Errors) и исключения времени выполнения (RuntimeExceptions) - последние два типа также объединяют в категорию неконтролируемых (unchecked) исключений. В чем различие?

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

Неконтролируемые (unchecked) исключения не требуют обязательной обработки, поскольку представляют собой те ситуации, когда ошибка не зависит непосредственно от программиста (например произошёл сбой в аппаратном обеспечении), либо те, когда ошибку обрабатывать не имеет смысла, т.к. проще внести изменения в код - к ним относятся все потомки классов Error и RuntimeException.

20

Обработка исключений в в Java

Таблица1. Методы класса Throwable

21

Обработка исключений в Java

Операторы для работы с исключениями

try { // код, который выбрасывает исключение

[ throw объект_исключения; ]

}

catch(Тип_исключения_1 объект){

//код для обработки исключения

}

catch(Тип_исключения_2 объект){

//код для обработки исключения

}

...

finally { // код, который выполняется обязательно

}

//синтаксис метода, выбрасывающего исключения

тип имя_метода(аргументы) throws класс-исключение1,...

{ // тело метода }

22

Обработка исключений в Java

В Java для работы с исключениями используются операторы try, catch и finally, а также ключевое слово throws. В блок try помещается программный код, который отслеживается на случай, если возникнет исключительная ситуация. Если исключительная ситуация возникает, то управление передается блоку catch. Программный код в этом блоке выполняется, только если возникает исключительная ситуация, причем не любая, а определенного типа (класса исключения). Аргумент, определяющий, какого типа исключительные ситуации обрабатываются в блоке catch, указывается после ключевого слова catch в круглых скобках.

Поскольку в блоке try могут возникать исключения разных типов, для каждого из них можно предусмотреть свой блок catch. Если блоков catch несколько, при возникновении исключительной ситуации они перебираются последовательно до совпадения типа исключительной ситуации с аргументом блока catch.

После блоков try и catch можно указать блок finally с кодом, который выполняется в любом случае вне зависимости от того, возникла исключительная ситуация или нет.

Может случиться, что в блоке try возникла ошибка, но подходящего блока catch для ее обработки нет. В этом случае исключение выбрасывается из метода и должно быть обработано внешним к методу программным кодом. Согласно правилам языка Java, исключения, которые не обрабатываются в методе и выбрасываются из метода, указываются в сигнатуре метода после ключевого слова throws. То есть указываются классы выбрасываемых из метода исключений.

Если возникает ошибка, обработка которой в программе не предусмотрена, используется обработчик исключительной ситуации по умолчанию, который выводит сообщение об ошибке и программа завершает работу.

Для явного выбрасывания исключения используется оператор throw.

23

Обработка исключений в Java

Пример 7. Не явное выбрасывание исключения

24

Обработка исключений в Java

Пример 7. Не явное выбрасывание исключения

25

Обработка исключений в Java

В классе Throwable переопределяется метод toString(), который, как известно, определен в общем суперклассе Object, причем переопределяется он так, что в качестве результата возвращает строку, описывающую соответствующую ошибку. Напомним, что метод toString() вызывается автоматически, например, при передаче объекта-исключения методу println() в качестве аргумента. Соответствующий пример программы и результат ее выполнения представлен на слайде.

В первой текстовой строке, выведенной на экран, текст после слова Ошибка: появился в результате преобразования объекта исключения e в текстовый формат с помощью метода toString().

26

Обработка исключений в Java

Пример 8. Явное выбрасывание исключения

27

Обработка исключений в Java

Пример 8. Явное выбрасывание исключения

28