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

Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 75

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

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

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

Для того чтобы убедиться в этом, замените в предыдущем примере программы строку кода Гог(1пс 1=0; 1 < 10т 1+ь) ( на строку Гог(ъпт 1=00 1 < пцшв.ьепдвьт 1++) ( Теперь индексирование массива не выходит за его границы в цикле гол. Следовательно, никакого исключения не генерируется и блок сассп не выполняется. Второй пример обработки исключительной ситуации Следует особо подчеркнуть, что весь код, выполняемый в блоке ггу, контролируется на предмет исключительных ситуаций, в том числе и тех, которые могут возникнуть в результате вызова метода из самого блока агу.

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

Это исключение не перехватывается методом Оепехсерг1оп () . Но поскольку метод Оепехсерг1оп () вызывается из блока сгу в методе иа1п (), то исключение перехватывается в блоке сагсп, связанном непосредственно с этим блоком ггу. /* Исключение может быть сгенерировано одним методом и перехвачено другим.

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

Сопяо1е.иг1геьтпе("Индекс вышел за границы массива!"); ) Сопяо1е.нглсеплпе("После блока перехвата исключения."); ) Выполнение этой программы дает такой же результат, как и в предыдущем примере; До генерирования исключения. пошл[0): 0 пцшя[1): 1 тилля [2): 2 пошл(3): 3 Индекс вышел за границы массива! После блока перехвата исключения.

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

Вообще говоря, если исключение ие перехватывается в программе, то оно будет перехвачено исполняющей системой. Но дело в том, что исполняющая система выдаст сообщение об ошибке и прервет выполнение программы. Так, в приведенном ниже примере программы исключение в связи с выходом индекса за границы массива ие перехватывается. // предоставить исполняквцей системе СЗ возможность О самой обрабатывать ошибки. цвтпч Бувсекю с1азз Носпапб1еб ( воак1с чоуб Маьп() ( ьпс[] пцшв = пен тпс(4]т Сопво1е.ик1кеььпе("До генерирования исключения.") // Сгенерировать исключение в связи с выходом // инлекса за границы массива. ток(1пе 1=0," 1 < 10; 1ьь) ( пцшв(1] = 1; Сопво1е.иггсеьгпе("пцшв[(0)): (1)", 1, пцша[1))т ) ) ) Когда возникает ошибка индексирования массива, выполнение программы прерывается и выдается следующее сообщение об ошибке: Необработанное исключение: Зувееш.1пбехоцеотвапчевхсероьоп: Индекс находился вне границ массива.

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

Как упоминалось ранее, тип генерируемого исключения должен соответствовать типу, указанному в операторе сассп. В противном случае исключение не будет перехвачено. Например, в приведенной ниже программе предпринимается попытка пере- Глава 13, Обработка исключительных ситуаций 396 хватить ошибку нарушения границ массива в блоке сасс]т, реагирующем на исключение 01ч1бенузегоехсерс1оп, связанное с делением на нуль и являющееся еще одним стандартным исключением. Когда индексирование массива выходит за его границы, генерируется исключение 1пбех0цс01напсеехсерс1оп, но оно не будет перехвачено блоком саго)т, что приведет к аварийному завершению программы.

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

*/ сагсп (01ч1бенукегокхсерг1оп) ( // Перехватить исключение. сопяо1е.иг1сеьгпе("индекс вышел за границы массива!"); ) Сопво1е.нгггетапе("После блока перехвата исключения."]; ) Вот к какому результату приводит выполнение этой программы: до генерирования исключения. поше[0]: 0 пцшн(1]: 1 пцшэ(2]: 2 гпхлэ(31: 3 Необработанное исключение: зуэгеш.1пбехоцготнапдекхсерг1оп: Индекс находился вне границ массива в ЕхстуреМ1эшаСсЬ.Ма1п() Как следует из приведенного выше результата, в блоке сасс]т, реагирующем на исключение ОгчгбенузегоЕхсерггоп, не удалось перехватить исключение 1пбехОцСОГВапсекхсерС1оп.

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

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

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

Глава )3. Обработка исключительных ситуаций 397 Применение нескольких операторов са~сЬ С одним оператором Сгу можно связать несколько операторов сасс)п И на практике зто делается довольно часто. Но все операторы сасс)т должны перехватывать исключения разного типа. В качестве примера ниже приведена программа, в которой перехватываются ошибки выхода за границы массива и деления на нуль. // Использовать несколько оператороя сатен. иягпч Зуягев; с1аяя Ехспево4 ( ясасгс уоье Иагп() ( // Здесь массив ппвег длиннее массива х(апов. гпс(! повес = ( 4, 8, 16, 32, 64, 128, 256, 512 )т гпг[! Пепси = ( 2, О, 4, 4, О, 8 ]т бог(1пг 1=04 г < ппвег.ьепчгпт 144) ( ггу ( Сопяо1е.нг1сеЬгпе(ппвег[г! + " / " ч т(епов(1! + " равно " + навет[1)/белов[1!)т ) сассн (Оьугт(езувегокхсерс1оп) ( Сопяо1е.нггсеаапе("Делить на нуль нельзя!"); ! сасси (1пт)ехспсотаапчеЕхсерс1оп) ( Сопяо1е.нг1сеЬгпе( "Подходящий элемент не найден."); ) ) ) Вот к какому результату приводит выполнение атой программьс 4 / 2 равно 2 делить на нуль нельзя! 16 / 4 равно 4 32 / 4 равно 8 Делить на нуль нельзя! 128 / 8 равно 16 Подходящий элемент не найден.

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

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

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

Г. Шилдт - С# 3.0 Полное руководство
C_sharp_3TCR_code
Apndx.lst
Chap2.lst
Chap3.lst
Chap4.lst
Chap5.lst
Chap6.lst
Chap7.lst
Chap8.lst
Chap9.lst
Chap10.lst
Chap11.lst
Chap12.lst
Chap13.lst
Chap14.lst
Chap15.lst
Chap16.lst
Chap17.lst
Chap18.lst
Chap19.lst
Chap20.lst
Chap21.lst
Chap22.lst
Chap23.lst
Chap24.lst
Chap25.lst
Chap26.lst
Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6458
Авторов
на СтудИзбе
304
Средний доход
с одного платного файла
Обучение Подробнее