Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Исключительные ситуации, их классификация и различия.

Читайте также:
  1. II.Производственная классификация.
  2. А. Эпидемии. Инфекционные заболевания и их классификация. Пути передачи инфекции.
  3. Анализ и классификация проблем в процессе адаптации иностранных студентов в образовательной среде российского ВУЗа
  4. Б. Классификация наводнений.
  5. Биоклиматическая классификация ЕТ для оценки тепловой чувствительности и уровня дискомфортности ID
  6. Бюджетная классификация Российской Федерации: понятие, направленность действующей бюджетной классификации, состав.
  7. Бюджетная классификация, ее сущность и роль в бюджетном процессе

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

Throwable

Error -----------------|-------------------- Exception

IOException ------|--- RuntimeException

Обратите внимание на то, что, хотя все исключительные ситуации происходят от класса Throwable, иерархия сразу разделяется на две ветви: Error и Exception.

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

Программируя на языке Java, основное внимание следует уделять иерархии Exception. Эта иерархия также разделяется на две ветки: исключительные ситуации, производные от класса RuntimeException, и остальные. Общее правило таково.

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

Исключительные ситуации, производные от класса RuntimeException, связаны со следующими проблемами.

· Неверное приведение типов.

· Выход за допустимые пределы массива.

· Попытка обратиться к объекту по ссылке null.

Остальные исключительные ситуации возникают в следующих случаях.

· Обрыв файла.

· Попытка соединиться с неправильным URL-адресом.

· Попытка обнаружить несуществующий объект класса Class.

возбудить двумя способами:

throw new EOFException();

или, если хотите,

EOFException e = new EOFException();
throw e;

 

 

В программе может возникнуть ситуация, не предусмотренная ни одним из существующих классов. В этом случае можно достаточно просто создать свой собственный класс исключительных ситуаций. Для этого нужно просто вывести новый класс из класса Exception или одного из его дочерних классов, например IOException. Этот класс можно снабдить конструктором по умолчанию и конструктором, содержащим подробное сообщение. (Это сообщение, полезное для отладки, выводится на печать с помощью метода toString базового класса Throwable.)

class FileFormatException extends IOException
{
public FileFormatException() {}
public FileFormatException(String gripe)
{
super(gripe);
}
}

Теперь мы готовы возбудить исключительную ситуацию своего собственного типа.

String readData(BufferReader in) throws FileFormatException
{
while (…)
{
if (ch == -1) // Обнаружен маркер конца файла EOF.
{
if (n < len)
throw new FileFormatException();
}
}
return s;
}

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

В языке Java есть лучшее решение — использовать раздел finally.

Graphics g = image.getGraphics();
try
{
Код, который может возбуждать исключительные ситуации.
}
catch (IOException e)
{
Выводим диалоговое окно.
}
finally
{
g.dispose();
}


Дата добавления: 2015-10-29; просмотров: 85 | Нарушение авторских прав


Читайте в этой же книге: Структура пакета Java 2 SDK. | Конструктори | Спадкування |
<== предыдущая страница | следующая страница ==>
Принципы объектно-ориентированного программирования.| Интерфейсные компоненты пользователя.

mybiblioteka.su - 2015-2024 год. (0.007 сек.)