Главная » Java, Структуры данных и алгоритмы » Генерация исключений Java

0

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

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

Исключительная ситуация возникает в том случае, если в ходе выполнения Java-nporpaMMa обнаруживает определенную проблему и создает объект-«исключение», который идентифицируется с помощью описательного имени. Например, при попытке удалить десятый элемент из последовательности, состоящей лишь из пяти элементов, программа выполняет исключение BoundaryViolationExeption:

if (insertlndex > size()) { throw new

BoundaryViolationException(MNo element at index " + insertlndex);

}

Генерирование объекта исключения всегда осуществляется при необходимости обработки исключительной ситуации. Таким образом, оператор throw записывается следующим образом:

throw new (exception_constructor)([(param),(param)l. .]);

Кроме того, исключения могут генерироваться самой исполняющей системой. Например, случай, аналогичный приведенному выше примеру, будет выглядеть как ArraylndexOutOfBoundException. Попытка вызова девятого элемента массива, состоящего из шести элементов, приведет к исполнению Java-системой такого исключения.

Оператор throws

При описании метода необходимо указать возможные исключительные ситуации, на которые он будет реагировать. Этот прием используется как из функциональных соображений, так и просто ввиду соблюдения традиций. С точки зрения функциональности благодаря подобной записи пользователи знают, чего они могут ожидать от программы. Кроме того, Java-компилятор получает информацию о том, с какими исключениями он может столкнуться. Ниже приводится пример подобного описания метода:

public void goShopping() throws ShoppingListTooSmallException, OutOfMoneyException { // тело метода…

}

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

Ниже приводится пример «пропущенного» исключения:

public void getReadyForClass() throws ShoppingListTooSmallException, OutOfMoneyException {              ‘

goShoppingf(); // нет необходимости устранять или перехватывать // исключения,

// которые может выдавать метод goShopping(), потому что // метод getReadyForClass просто пропустит их makeCookiesForTA();

}

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

Объекты типа throwable

Как показано на рис. 2.6, классы Exception и Error являются подклассами класса Throwable, обозначающего любые объекты, которые могут генерироваться или улавливаться программой. Данный класс также содержит класс RuntimeException, являющийся подклассом класса Exception.

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

Класс Exception находится на вершине иерархии всех исключительных ситуаций. Более специфические исключения (например, Boundary – ViolationException) описаны в классах, которые являются подклассами классов Exception или RuntimeException. Следует отметить, что все исключения, которые не являются подклассами RuntimeException, должны быть описаны с помощь оператора throws в каждом методе, который их генерирует.

Рис. 2.6. Иерархия классов генерируемых объектов

Источник: Гудрич М.Т. Г93 Структуры данных и алгоритмы в Java / М.Т. Гудрич, Р. Тамассия; Пер. с англ. A.M. Чернухо. — Мн.: Новое знание, 2003. — 671 е.: ил.

По теме:

  • Комментарии