Составители:
Рубрика:
68
Занятие 10. Исключения
10.1 Ошибки времени исполнения
Исключения: непредусмотренные программистом ситуации, по су-
ти – ошибки алгоритма программы. Ошибки алгоритма не обнаружи-
ваются на стадии компиляции и проявляются только при исполнении
программы, как правило, прекращением ее исполнения с невнятными
сообщениями, генерируемыми операционной системой. Java исполь-
зует великолепный механизм обработки исключений, применяющий
встроенные операторы и классы пакета java.lang.
Ошибки времени исполнения описываются
расширениями класса
java.lang.Throwable; в случае нежелательного поворота в выполнении
программы создается объект нужного типа, к которому применяются
оператор throw (английское «бросать, бросить»). После оператора
throw выполнение блока операторов прекращается и управление пере-
дается в блок обработки исключения. Оператор throw отслеживается
компилятором, который принуждает программиста обеспечить ло-
кальную обработку возможного исключения или
декларировать по-
тенциальную опасность метода (или конструктора), в котором приме-
няется оператор throw.
Все известные ошибки такого рода уже включены в виде классов в
различные пакеты API. Начинающий программист неизбежно сталки-
вается с исключениями типа RuntimeException – «нештатными» собы-
тиями, обработку которых JVM берет на себя:
ArrayIndexOutOfBoundsException, ClassNotFoundException,
NullPointerException и др..
10.2 Декларация throws
Главный принцип – не дать программисту забыть о возможности
нежелательного развития событий. Если программист использует по-
тенциально опасный код, его программа не будет откомпилирована до
тех пор, пока он явно не объявит свой код потенциально опасным,
ИЛИ не обеспечит обработку исключения на месте.
69
Место потенциальной опасности ограничивается МЕТОДОМ или
КОНСТРУКТОРОМ, производящими действия, результат которых
неоднозначен. Эти действия могут заключаться в вызовах других по-
тенциально опасных методов или в применении оператора throw.
Опасность метода (или конструктора) определяется декларацией
throws в его заголовке. Компилятор читает и анализирует заголовки
методов, к которым обращается программа, и заставляет программиста
отреагировать
на объявленные исключения.
10.3 Локальная обработка ошибок времени испол-
нения
Программисту всегда предлагается выбор – декларировать выбра-
сываемое исключение или выполнить локальную – непосредственно в
месте возникновения – обработку исключения. Для этого в программе
создается развилка
try {операторы
}catch(Exception e_name){
другие_операторы
}finally{
операто-
ры_которые_надо_выполнить_в_любом_случае
}
подобная конструкции if(..){…}else{…..}, только без анализируемого
логического выражения. Потенциально опасный код помещается в
блок
try {….} . Если он успешно выполняется, блок catch(Exception
e_name) {….} игнорируется, и управление передается следующему за
конструкцией оператору. Если же при попытке выполнения кода из
блока try {….} выбрасывается исключение, управление передается
блоку catch(Exception e_name) {….}. Экземпляр класса, описывающего
возникшее исключение, передается в блок catch как параметр. В неко-
торых случаях работа программы может и завершиться в
этом блоке.
Если же после блоков try{…} и catch{…}, чем бы они не закончи-
Страницы
- « первая
- ‹ предыдущая
- …
- 33
- 34
- 35
- 36
- 37
- …
- следующая ›
- последняя »