В данном примере массивnumsтипаintсостоит из четырех элементов. Но в циклеforпредпринимается попытка проиндексировать этот массив от 0 до 9, что и приводит к появлению исключенияIndexOutOfRangeException,когда происходит обращение к элементу массива по индексу 4.

Несмотря на всю свою краткость, приведенный выше пример наглядно демонстрирует ряд основных моментов процесса обработки исключительных ситуаций. Во-первых, код, который требуется контролировать на наличие ошибок, содержится в блокеtry.Во-вторых, когда возникает исключительная ситуация (в данном случае — при попытке проиндексировать массивnumsза его границами в циклеfor),в блокеtryгенерируется исключение, которое затем перехватывается в блокеcatch.В этот момент выполнение кода в блокеtryзавершается и управление передается блокуcatch.Это означает, что операторcatchневызывается специально, а выполнение кода переходит к нему автоматически. Следовательно, оператор, содержащий методWriteLine() и следующий непосредственно за цикломfor,где происходит выход индекса за границы массива, вообще не выполняется. А в задачу обработчика исключений входит исправление ошибки, приведшей к исключительной ситуации, чтобы продолжить выполнение программы в нормальном режиме.

Обратите внимание на то, что в оператореcatchуказан только тип исключения (в данном случае —IndexOutOfRangeException),а переменная исключения отсутствует. Как упоминалось ранее, переменную исключения требуется указывать лишь в том случае, если требуется доступ к объекту исключения. В ряде случаев значение объекта исключения может быть использовано обработчиком исключений для получения дополнительной информации о самой ошибке, но зачастую для обработки исключительной ситуации достаточно просто знать, что она произошла. Поэтому переменная исключения нередко отсутствует в обработчиках исключений, как в рассматриваемом здесь примере.

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

for(int i=0; i < 10; i++)    {

на строку

for(int i=0; i < nums.Length; i++)    {

Теперь индексирование массива не выходит за его границы в циклеfor.Следовательно, никакого исключения не генерируется и блокcatchне выполняется.

Второй пример обработки исключительной ситуации

Перейти на страницу:

Похожие книги