Обработка исключительных ситуаций. Основные стандартные исключения

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

Механизм исключений предназначен только для событий, которые могут произойти в результате работы самой программы и указываются явным образом. Исключения возникают тогда, когда некоторая часть программы не смогла сделать то, что от нее требовалось. При этом другая часть программы может попытаться сделать что-нибудь иное.

Исключения позволяют логически разделить вычислительный процесс на две части — обнаружение аварийной ситуации и ее обработка. Это важно не только для лучшей структуризации программы. Главное то, что функция, обнаружившая ошибку, может не знать, что предпринимать для ее исправления, а использующий эту функцию код может знать, что делать, но не уметь определить место возникновения. Это особенно актуально при использовании библиотечных функций и программ, состоящих из многих модулей.

Исключения генерирует либо среда выполнения, либо программист с помощью оператора 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

Наши рекомендации