Главная » Просмотр файлов » Г. Шилдт - С#4.0 Полное руководство

Г. Шилдт - С#4.0 Полное руководство (1160795), страница 76

Файл №1160795 Г. Шилдт - С#4.0 Полное руководство (Г. Шилдт - С#4.0 Полное руководство) 76 страницаГ. Шилдт - С#4.0 Полное руководство (1160795) страница 762019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 76)

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

Как пояснялось ранее, если исключение не генерируется в блоке г ту, то блок сакс]т не выполнлется, а управление программой передается оператору, следующему после Глава 13. Обработка исключи(альных ситуаций 407 блока с асс)ь Для того чтобы убедиться в этом, замените в предыдущем примере про- граммы строку кода Гог(ьпс 1=0~ 1 < 10) 1++) ( на строку Го<(1пс 1=0; 1 < ногая.ьепэгп; 1++) ( Теперь индексирование массива не выходит за его границы в цикле 1ог. Следовательно, никакого исключения не генерируется и блок сабо]т не выполняется.

Второй пример обработки исключительной ситуации Следует особо подчеркнуть, что весь код, выполняемый в блоке с ту, контролируется на предмет исключительных ситуаций, в том числе и тех, которые могут возникнуть в результате вызова метода из самого блока сгу. Исключение, генерируемое методом в блоке сгу, может быть перехвачено в том же блоке, если, конечно, этого не будет сделано в самом методе. В качестве еще одного примера рассмотрим следующую программу, где блок с ту помещается в методе Ма1п () . Из этого блока вызывается метод ОепЕхсер11оп (), в котором и генерируется исключение 1пс(ехОцгОГЕапдеЕхсерб1оп.

Это исключение не перехватывается методом ОепЕхсерб1оп () . Но поскольку метод ОепЕхсербьоп () вызывается из блока с ту в методе маьп ( ), то исключение перехватывается в блоке с асс)ь связанном непосредственно с этим блоком сгу. /* Исключение может быть сгенерировано одним методом и перехвачено другим. */ ця1пс зуясев; с1аяя ЕхсТея'ь ( // Сгенерировать исключение. рцб11с ягагьс но1г( оепЕхсергьоп() ( 1пг[) пцвя = пен Ьпг[4]; Сопяо1е.нгьгеЬ1пе(юпо генерирования исключения.") // Сгенерировать исключение в связи с выходом индекса за границы массива.

Гог(ьпс 1=-0; 1 < 10; 1++) ( ловя[1] = 1; Сопяо1е.нгьге1.1пе("пшпя[(0)]: (1)", 1, ловя[1]); Сопяо1е.нглгеььпе("Не подлежит выводу"); ) ) с1аяя Ехсоепю2 ( ясасьс но1г( наьп () ( сгу ( Ехстеяс.оепкхсеро1оП(); 408 часть (. язык С() сассп (1пбехбцХОГВапдекхсерсьоп) ( Перехватить исключение. сопяо1е.хх1хеььпе("инлекс вышел за границы массива!" ); ) Сопяо1е.нхгсеЬюпе("После блока перехвата исключения."); Выполнение этой программы дает такой же результат, как и в предыдущем примере. До генерирования исключения. пцвя(0): 0 пшпя (1]: 1 пцвя (2): 2 пшпя (3): 3 Индекс вышел за границы массива! После блока перехвата исключения. Как пояснялось выше, метод Пепкхсерх1оп () вызывается из блока Сху, и поэтому генерируемое им исключение перехватывается не в нем, а в блоке сагой внутри метода Иа1п () .

А если бы исключение перехватывалось в методе ПепПхсерх1оп (), оно не было бы вообще передано обратно методу махп () . Последствия неперехвата исключений Перехват одного из стандартных исключений, как в приведенных выше примерах, дает еше одно преимущество: он исключает аварийное завершение программы. Как только исключение будет сгенерировано, оно должно быль перехвачено каким-то фрагментом кода в определенном месте программы. Вообще говоря, если исключение не перехватывается в программе, то оно будет перехвачено исполняющей системой. Но дело в том, что исполняющая система выдаст сообщение об ошибке и прервет выполнение программы.

Так, в приведенном ниже примере программы исключение в связи с выходом индекса за границы массива не перехватывается. Предоставить исполняющей системе СМ возможность самой обрабатывать ошибки. цяьпц Буясев; с1аяя Моснапс(1ег( ( яхахьс чогб Маьп () ( Ьпх(] пцвя = пен хпх(4) Сопяо1е.ихгсеЬЬпе("До генерирования исключения."); Сгенерировать исключение в связи с выходом индекса за границы массива. Гох(1пх 1=0; 1 < 10; 1++) пцвя(1] = 1; Сопяо1е.нгьсеььпе("пцвя((0)]: (1)", 1, Пцшв(1))' Глава 13. Обработка исключительных ситуаций 409 Когда возникает ошибка индексирования массива, выполнение программы прерывается и выдается следующее сообщение об ошибке.

Необработанное исключение: Яуаоеш.1пбехсцСОГНапчеЕхсергьоп: Индекс находился вне границ массива. в Ногнапб1еб.на1п() в <имя файла>:строка 1б Зто сообщение уведомляет об обнаружении в методе Моснапс[1ес(. Малп () необработанного исключения типа Яуагеш. 1пбехоцСОГНапденхсерблоп, которое связано с выходом индекса за границы массива. Такие сообщения об ошибках полезны для отладки программы, но, по меньше мере, нежелательны при ее использовании на практике! Именно поэтому так важно организовать обработку исключительных ситуаций в самой программе.

Как упоминалось ранее, тип генерируемого исключения должен соответствовать типу, указанному в операторе сасс]ь В противном случае исключение не будет перехвачено. Например, в приведенной ниже программе предпринимается попытка перехватить ошибку нарушения границ массива в блоке сасс]з, реагирующем на исключение Р1ч1<(енузегонхсер11оп, связанное с делением на нуль и являющееся еще одним стандартным исключением. Когда индексирование массива выходит за его границы, генерируется исключение 1пс(ехОцСОГНапоенхсерС1оп, но оно не будет перехвачено блоком сасс)ь что приведет к аварийному завершению программы.

Не сработает! цв1пч Яувгеш; с1авв Ехстуреи1вшагсп ( вгаггс чола Маьп () ( ьпг(] пцшв = пеи ьпг[4] сгу ( Сопво1е.нг1ге11пе("до генерирования исключения.") Сгенерировать исключение в связи с выходом индекса за границы массива. Гог(1пг 1=0; 1 < 10; 1++) ( пошв[ь] Сопво1е.нгггеь1пе("поше[(0)]: (1)", 1, поза(1]); ) Сопво1е.нг1геььпе("Не подлежит выводу"); /* Если перехват рассчитан на исключение РьчьбеВузегоЕхсергьоп, то перехватить ошибку нарушения границ массива не удастся. */ сассп (РьчьбеВузегоЕхсерглоп) ( // Перехватить исключение.

Сопво1е.нгькевьпе("Индекс вышел за границы массива!" ); ) Сопво1е.нг1ьеььпе("После блока перехвата исключения."); ) Вот к какому результату приводит выполнение этой программы. 410 Часть (. язык С№ До генерирования исключения. пцщв(0]: О пцщв(1]: 1 пнин[2]: 2 пцщв(З): 3 Необработанное исключение: Яуасещ.1пдехбцгбткапдекхсерсгоп: Индекс находился вне границ массива в ЕхстуреМгвщагсд.на1п() в <имя файла>:строка 18 Как следует из приведенного выше результата, в блоке сасс)г, реагирующем на исключение Р1ч1деВуЕегоЕхсерс1оп, не удалось перехватить исключение 1пдехОцСОГЕапдеЕхсерг1оп.

Обработка исключительных ситуаций — "изящный" способ устранения программных ошибок Одно из главных преимуществ обработки исключительных ситуаций заключается в том, что она позволяет вовремя отреагировать на ошибку в программе и затем продолжить ее выполнение. В качестве примера рассмотрим еще одну программу, в которой элементы одного массива делятся на элементы друц)го. Если при этом происходит деление на нуль, то генерируется исключение Р1ч1девузегоЕхсерс1оп. Обработка подобной исключительной ситуации заключается в том, что программа уведомляет об ошибке и затем продолжает свое выполнение. Таким образом, попытка деления на нуль не приведет к аварийному завершению программы из-за ошибки при ее выполнении.

Вместо этого ошибка обрабатывается "изящно", не прерывая выполнение программы. УУ Изящно обработать исключительную ситуацию и продолжить выполнение програьвая. цетлин зузсещг с1аза ЕхсоещоЗ ( зсасгс чогд Магп() ( гпс(] пцщег = ( 4, 8, 18, 32, 64, 128 ); гпс(] делом = ( 2, О, 4, 4, О, 8 ); Гог(1пс >=04 г < пцщег.ЬепдГЬи 1++) ( ггу ( Сопво1е.иггсеЬ1пе(пожег(г] депощ(г] + " равно пцщег(1]/депощ(1]); ) сассс (РгчгдевузегоЕхсерсгоп) ( Перехватить исключение.

Сопво1е.иггсеЬгпе("Делить на нуль нельзя!") ) ] ) Ниже приведен результат выполнения этой программы. Глава 13. Обработка кскаочктельных ситуаций 411 4 У 2 равно 2 Делить на нуль нельзя! 16 / 4 равно 4 32 / 4 равно 8 Делить на нуль-нельзя! 128 / 8 равно 16 Из данного примера следует еще один важный вывод: как только исключение обработано, оно удаляется из системы. Поэтому в приведенной выше программе проверка ошибок в блоке с гу начинается снова на каждом шаге цикла гог, при условии, что все предыдущие исключительные ситуации были обработаны. Это позволяет обрабатывать в программе повторяющиеся ошибки. Применение нескольких операторов са~сЬ С одним оператором сгу можно связать несколько операторов сасс)3.

И на практике это делается довольно часто. Но все операторы сато]т должны перехватывать исключения разного типа. В качестве примера ниже приведена программа, в которой перехватываются ошибки выхода за границы массива и деления на нуль. О испольэовать несколько операторов сагой. пвтпч зувсев( с1авз Ехспево4 зсас1с уота Маьп() ( Здесь массив ппиег длиннее массива Селом.

1пс(] пивег = ( 4, 8, 16, 32, 64, 128, 256, 512 )1 1пс[) оепов = ( 2, О, 4, 4, О, 8 ]) бог(тпг 1=0; 1 < ппиег.вепвсп1 1++) ( ггу ( Соп*о1е.кгтсеьхпе(повес[1] г(епои[х] е " равно п1ппег[1]Иепои(г)); сапов (О1у1оеВузегокхсерсьоп) ( Сопво1е.нгтгеьлпе("Делить на нуль нельзя!"); ) сассп (1поехсвГОГВапсекхсерстоп) ( сопво1е.хг1геььпе("подходящий элемент не найден.") ) ) ) Вот к какому результату приводит выполнение этой программы. 4 / 2 равно 2 Делить на нуль нельзя! 16 У 4 равно 4 32 / 4 равно 8 Делить на нуль нельзя> 412 Часть!. Язык С() 128 / 8 равно 16 Подходящий элемент не найден.

Характеристики

Тип файла
DJVU-файл
Размер
7,66 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6556
Авторов
на СтудИзбе
299
Средний доход
с одного платного файла
Обучение Подробнее