В данном примере массивnumsтипаintсостоит из четырех элементов. Но в циклеforпредпринимается попытка проиндексировать этот массив от 0 до 9, что и приводит к появлению исключенияIndexOutOfRangeException,когда происходит обращение к элементу массива по индексу 4.
Несмотря на всю свою краткость, приведенный выше пример наглядно демонстрирует ряд основных моментов процесса обработки исключительных ситуаций. Во-первых, код, который требуется контролировать на наличие ошибок, содержится в блокеtry.Во-вторых, когда возникает исключительная ситуация (в данном случае — при попытке проиндексировать массивnumsза его границами в циклеfor),в блокеtryгенерируется исключение, которое затем перехватывается в блокеcatch.В этот момент выполнение кода в блокеtryзавершается и управление передается блокуcatch.Это означает, что операторcatch
Обратите внимание на то, что в оператореcatchуказан только тип исключения (в данном случае —IndexOutOfRangeException),а переменная исключения отсутствует. Как упоминалось ранее, переменную исключения требуется указывать лишь в том случае, если требуется доступ к объекту исключения. В ряде случаев значение объекта исключения может быть использовано обработчиком исключений для получения дополнительной информации о самой ошибке, но зачастую для обработки исключительной ситуации достаточно просто знать, что она произошла. Поэтому переменная исключения нередко отсутствует в обработчиках исключений, как в рассматриваемом здесь примере.
Как пояснялось ранее, если исключение не генерируется в блокеtry,то блокcatchне выполняется, а управление программой передается оператору, следующему после блокаcatch.Для того чтобы убедиться в этом, замените в предыдущем примере программы строку кода
for(int i=0; i < 10; i++) {
на строку
for(int i=0; i < nums.Length; i++) {
Теперь индексирование массива не выходит за его границы в циклеfor.Следовательно, никакого исключения не генерируется и блокcatchне выполняется.
Второй пример обработки исключительной ситуации