Добрый день.
Сегодня мы коротко поговорим о механизме исключений в Java.
Причем не просто о механизме как таковом, а о том, зачем необходимы собственные исключения и как их использовать на практике.
Итак - начнем с азов. Исключение (Java) — это некий объект, описывающий исключительное состояние, возникшее в каком-либо месте работы программы.
При этом (при возникновении исключения) создается объект класса Exception.
Затем может быть несколько вариантов развития событий:
1) Исключение не обрабатывается, то есть для данного участка кода нет обработчика соот. типа исключения.
В этом случае происходит завершение работы потока, в котором произошло исключение.
2) Исключение обрабатывается, и в этом случае управление передается в блок обработки исключений или-же в блок финализации.
Для примера:
try
{
// участок, где мы ожидаем исключение
}
catch (ИсключениеА еxt)
{
// обработчик Исключения А
}
catch (ИсключениеБ еxt)
{
// обработчик Исключения Б
}
finally
{
// блок финализации, который должен всегда выполняться.
}
Со стандартными исключениями все просто. Они определены и их обработка - это рутина
программирования.
Но в Java можно определять о обрабатывать свои исключения.
Сделано это по многим причинам, но одно из основных применений этой возможности
мы сейчас рассмотрим.
Итак - есть некое приложение, в котором есть некая процедура,
обрабатывающая некие, полученные извне, данные.
Так или иначе, данные могут быть некорректны (к примеру вместо число - строка и др.)и
состояние (некорректности входящих данных) необходимо обработать.
Это сделать можно множеством путей, одним из которых есть использование механизма
исключений.
// класс собственного исключения, описывающего некорректность пары ключ <> значение
class ParceError extends Exception
{
String KeyName,KeyValue;
// конструктор
ParceError(String inKeyName,String inKeyValue)
{
KeyName = inKeyName;
KeyValue = inKeyValue;
}
// конструктор по умолчанию
ParceError()
{
this("not","not");
}
// view
public String toString()
{
return "KeyName="+KeyName+" "+"KeyValue="+KeyValue;
}
}
// расшифровка ключей
// мы указываем, что наша процедура может генерировать исключение ParceError
// которое необходимо обработать
DecodeKeys(HashMap In,String Data) throws ParceError
{
// ..
// в случае некорректности некой пары ключ <> значение
// генерируем исключение
throw new ParceError(Key,Value);
// ..
}
try
{
Result = DecodeKeys(Result,Data);
}
catch (ParceError ext)
{
// обрабатываем сгенерированное исключение
}
То есть как видим, мы отделяем механизм обработки некорректности. Более того - мы из вызывающего метода не лезем в внутреннюю кухню проверки ...
Такого же рода меры можно применять при работе с различными событиями, для примера - обработку очередей и др.
Комментариев нет:
Отправить комментарий