- •Программирование Тема 5 Обработка исключений
- •Обработка исключений в Java
- •Обработка исключений в Java
- •Обработка исключений в в Java
- •Обработка исключений в Java
- •Обработка исключений в Java
- •Обработка исключений в Java
- •Обработка исключений в Java
- •Обработка исключений в Java
- •Обработка исключений в Java
- •Обработка исключений в Java
- •Обработка исключений в Java
- •Обработка исключений в Java
- •Обработка исключений в Java
- •Обработка исключений в Java
- •Обработка исключений в Java
- •Контрольные вопросы
Обработка исключений в 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