Обработка исключительных ситуаций. Основные стандартные исключения
Исключительная ситуация, или исключение, — это возникновение аварийного события, которое может порождаться некорректным использованием аппаратуры или неправильной работой программы, например, делением на ноль или переполнением.
Механизм исключений предназначен только для событий, которые могут произойти в результате работы самой программы и указываются явным образом. Исключения возникают тогда, когда некоторая часть программы не смогла сделать то, что от нее требовалось. При этом другая часть программы может попытаться сделать что-нибудь иное.
Исключения позволяют логически разделить вычислительный процесс на две части — обнаружение аварийной ситуации и ее обработка. Это важно не только для лучшей структуризации программы. Главное то, что функция, обнаружившая ошибку, может не знать, что предпринимать для ее исправления, а использующий эту функцию код может знать, что делать, но не уметь определить место возникновения. Это особенно актуально при использовании библиотечных функций и программ, состоящих из многих модулей.
Исключения генерирует либо среда выполнения, либо программист с помощью оператора throw.
Имя | Описание |
DivideByZeroException | Попытка деления на ноль |
FormatException | Попытка передать в метод аргумент неверного формата |
IndexOutOfRangeException | Индекс массива выходит за границы диапазона |
InvalidCastException | Ошибка преобразования типа |
OutOfMemoryException | Недостаточно памяти для создания нового объекта |
OverFlowException | Переполнение при выполнении арифметических операций |
StackOverFlowException | Переполнение стека |
Вопрос 28
Обработка исключительных ситуаций. Оператор try
Обработка исключений происходит в операторе try. Он содержит 3 части:
1) Контролируемый блок - составной оператор, предваряемый ключевым словом try. Все функции прямо или косвенно вызываются из блока так же ему принадлежат.
2) Один или несколько обработчиков исключений - блоков catchв которых описывается как обрабатываются ошибки различных типов.
3) Блок завершения finally выполняется независимо от того, возникла ошибка в контролируемом блоке или нет.
Синтаксис оператора try:
try блок [блок catch][блок finally]
Отсутствовать могут либо блоки catchлибо finally, но не оба одновременно.
Реализация обработки исключительных ситуаций:
1) Обработка исключения начинается с появления ошибки. Функция или операция, в которой возникла ошибка, генерирует исключение.
2) Выполнение текущего блока прекращается, отыскивается соответствующий обработчик исключения, и ему передается управление.
3) Выполняется блок finally если он присутствует.
4) Если обработчик не найден, вызывается стандартный обработчик исключения. Обычно он выводит на экран окно с информацией об исключении и завершает текущий процесс.
Обработчики исключений должны располагаться непосредственно за блоком try. Они начинаются с ключевого слова catchза которым в скобках следует тип обрабатываемого исключения. Блоки catch просматриваются в том порядке в котором они записаны, пока не будет найден соответствующий типу выброшенного исключения.
Вопрос 29
Обработка исключительных ситуаций. Оператор throw
Для генерации исключения используется оператор throw с параметром, определяющим вид исключения. Параметр должен быть объектом, порожденным от стандартного класса System.Exception. Этот объект используется для передачи информации об исключении его обработчику.
Синтаксис оператора throw:
throw [ выражение ];Форма без параметра применяется только внутри блока catch для повторной генерации исключения. Тип выражения, стоящего после throw, определяет тип исключения, например:
throw new DivideByZeroException();Здесь после слова throw записано выражение, создающее объект стандартного класса "ошибка при делении на 0" с помощью операции new.
При генерации исключения выполнение текущего блока прекращается и происходит поиск соответствующего обработчика с передачей ему управления. Обработчик считается найденным, если тип объекта, указанного после throw, либо тот же, что задан в параметре catch, либо является производным от него.
Вопрос 30