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

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

Пример 9. Обработка контролируемого исключения (вариант 1)

29

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

Пример 9. Обработка контролируемого исключения (вариант 2)

30

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

Пример 10. Создание и использование класса исключения

31

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

Пример 10. Создание и использование класса исключения

32

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

Создание собственного исключения сводится к созданию подкласса класса Exception, который, в свою очередь, является подклассом класса Throwable.

В программе описывается класс пользовательского исключения MyException. У класса есть три поля: min и max типа double и error - объект класса String. Также в классе переопределяется метод toString(), который возвращает строку сообщения об ошибке.

В классе Primer определяется статический метод MyLog() с аргументом типа double. В качестве результата метод возвращает значение типа double. Метод описан как способный выбрасывать

исключение пользовательского класса MyException. В теле метода для значения аргумента x вычисляется натуральный логарифм по формуле: ln( x ( x −1)) .

Если аргумент, переданный методу MyLog(), лежит вне пределов диапазона [0, 1], методом возвращается значение Math.log(x*(x-1)) Если же аргумент метода MyLog() попадает в диапазон [0, 1], приведенное выражение вычислено быть не может, поскольку у натурального логарифма аргумент отрицательный. В этом случае методом MyLog() генерируется и выбрасывается исключение пользовательского типа MyException. Аргументами конструктору при этом передаются границы диапазона [0 , 1] и описание ошибки (неверный аргумент).

В главном методе программы выполняется попытка вычислить значение методом MyLog() и вывести его на экран. При этом отслеживается возможность появления исключения класса MyException. В случае если соответствующая ошибка возникает, выполняется ее обработка, которая состоит в том, что на экран выводится описание объекта исключения. Этот объект передается методу println() в блоке catch, а наблюдаемый при этом результат отражает способ переопределения метода toString() в классе MyException.

33

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

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

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

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

}

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

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

}

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

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

}

...

// аналог catch(...) C++ catch {

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

}

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

}

34

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

Исключения в С# представлены классами. Все классы исключений могут быть унаследованы от встроенного класса исключений Exception, который является частью пространства имен System.

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

В C# существует обширная иерархия стандартных классов исключений.

Все исключения в C# имеют общего предка – класс Exception. Он хранит всю информацию о произошедшем исключении. Эту информацию мы можем получить через свойства класса:

Helplink: хранит адрес интернет-ресурса, на котром можно найти всю информацию об ошибке;

InnerException: объект класса Exception, хранит информацию об исключении, которое послужило причиной текущего исключения;

Message: хранит сообщение об исключении, текст ошибки;

Source: хранит имя объекта или сборки, которое вызвало исключение;

StackTrace: возвращает строковое представление стека вызовов, которые привели к возникновению исключения;

TargetSite: возвращает метод, в котором и было вызвано исключение.

Класс Exception имеет два важных подкласса - ApplicationException и SystemException. Они определяют две общие категории исключений: программные и исключения, образованные средой выполнения (т.е. CLR).

У класса SystemException имеется большое количество подклассов, среди которых можно выделить:

ArithmeticException – класс, который

представляет арифметические

исключения такие как

DivideByZeroException (деление

на

ноль,

наследуется

из ArithmeticException)

или

OverflowException (переполнение,

наследуется из ArithmeticException)

и

т.д. На основе

класса

исключений ApplicationException можно будет сформировать свои пользовательские классы исключений.

Вся обработка исключений в C# строится на 4 операторах: try, catch, throw, finally, которые вы уже знаете из Java и C++. В C# они используются приблизительно также. Приведем ряд примеров, для того чтобы показать принцип их работы.

35

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

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

36

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

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

37

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

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

38

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

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

39

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

Пример 13. Создание собственного класса исключения.

40

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

Пример 13. Создание собственного класса исключения.

41

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

В примере 12 в классе Person при установке возраста происходит проверка, и если возраст меньше 18, то выбрасывается исключение. Класс Exception принимает в конструкторе в качестве параметра строку, которая затем передается в его свойство Message.

Иногда удобнее использовать свои классы исключений. В примере 13 создается класс PersonException, который кроме пустого конструктора ничего не имеет, и то в конструкторе мы просто обращаемся к конструктору базового класса Exception, передавая в него строку message.

Если в методе Console.WriteLine указать объект класса исключения, то автоматически будет вызван метод toString() класса Exception, который возвращает сообщение об исключении, текст ошибки и строковое представление стека вызовов, которые привели к возникновению исключения.

Преимущества, которые дает нам использование исключений

Разделение обычного кода и кода обработки ошибок

Возможность передачи исключений для обработки вверх по стеку вызовов

Группировка и обработка ошибок по типам

42