Java как центр архипелага | страница 12
catch/finally. Блок try содержит инструкции, выполнение может
привести к возникновению исключительных ситуаций. Следующие за
ним один или несколько блоков catch предназначены для обработки
исключительных ситуаций. Наконец, блок finally содержит инст-
рукции, которые будут выполнены независимо от возникновения
исключительной ситуации в блоке try. При выходе из try-части
посредством инструкций передачи управления (break, return и
т.п.) блок finally также будет выполнен.
Для передачи информации об исключительной ситуации используются
об®екты классов - наследников класса Throwable. Например, класс
ArrayIndexOutOfBoundsException отвечает за контроль выхода ин-
дексов за границы массивов, класс OutOfMemoryException - за ре-
акцию на исчерпание свободной памяти, класс ClassCastException
- за ошибки при преобразовании типов, класс
InterruptedException - за обработку прерывания текущего потока
и т.д. Компонентой всех этих классов является поле типа String,
в которое помещается текст сообщения об ошибке. Метод
getMessage возвращает этот текст.
В подобных об®ектах может содержаться и дополнительная информа-
ция. Например, об®екты класса InterruptedIOException содержат
поле, в которое заносится число байт, переданных до возникнове-
ния исключительной ситуации.
Следующий фрагмент программы распечатывает сообщения из массива
messages. При этом мы не пытаемся выяснить размер этого масси-
ва, а просто полагаемся на механизм обработки исключительных
ситуаций. (Конечно, мы не советуем писать программы в таком
стиле).
try {
for (int i = 0; i < 100; i++) {
System.out.println (messages[i]);
}
}
catch (ArrayOutOfBoundException e) {
System.out.println ("No more messages");
}
catch (Exception e) {
System.out.println ("Unexpected exception");
System.out.println (e.getMessage());
}
finally {
System.out.println ("Work done");
}
Искобчительные ситуации могут возбуждаться программно при помо-
щи инструкций вида
throw new MyException ("Something's wrong");
Спецификации языка Java подразделяют исключительные ситуации на
две категории. К первой категории (класс Error) относятся ситу-
ации, на которые программа не обязана реагировать (это заведомо
сделает Java-машина). Ко второй категории (класс Exception) от-
носятся ситуации, которые программа должна обрабатывать обяза-
тельно. Если при выполнении метода может возникать исключитель-
ная ситуация второго типа, он должен либо обрабатывать ее сам с