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) от-

носятся  ситуации, которые программа должна обрабатывать обяза-

тельно. Если при выполнении метода может возникать исключитель-

ная ситуация второго типа, он должен либо обрабатывать ее сам с