Java - обработка исключений - исключения - описание
Primary tabs
Forums:
Общие сведения
- Исключение - ситуация, когда "что-то пошло не так" - это описание "ошибки времени выполнения"
- В Java механизм обработки во многом "автоматизирован" - в других языках (некоторых) ошибки возможно, придётся проверять "вручную"
- Управление ошибками в Яве перенесено в мир ООП
- Исключение в Java - это объект - именно он и описывает ошибку которая произошла
- Исключение в данной части кода можно либо обработать либо пропустить
- Исключения могут быть созданы системой времени исполнения Java, или же вручную
- Исключения созданные вручную позволяют уведомить вызывающий код о проблемах
- В Яве есть пять слов для работы с исключениями: try, catch, throw, throws, finally
- Все исключения в Яве являются подклассами класса Trowable - от которого наследуются системные Exception и Error. Первый (и его подкласс Exception) для пользовательского кода, а второй для ошибок, которые могут возникнуть в самой среде Java
Общая схема в коде (пример)
try { // блок перехвата исключения // Здесь какой-то код, в котором может быть оишибка // например из этой области может быть порождено автоматическое // исключение от системы исполнения Java } catch (ТипИсключения1 е) { // обработка исключения // обработчик исключений типа ТипИсключения1 } catch (ТипИсключения2 е) { // обработчик исключений типа ТипИсключения2 throw(e) // повторное (вручную) пересоздадим исключение } finally { // блок который следует выполнять после блока try{} }
Необработанные исключения
- Как только возникает "ошибка" система исполнения Явы генерирует исключение и "передаёт" его на обработку - работа класса, который произвёл ошибку прерывается.
- Если программист не предусмотрел собственный обработчик (так называемый стандартный обработчик), то исключение будет обработано стандартным образом средой исполнения
- Стандартный обработчик в том числе выводит текстовую информацию о классе в котором произошла ошибка и типе исключения - там будет указан и номер строки кода, которая породила исключение
- Трассировка стека, выводимая стандартным обработчиком показывает в какой последовательности вызывались методы до ошибки (выведется именно ветка вызовов ведущая к ошибке)
Обработка исключения программистом
Использование собственных обработчиков имеет два основных преимущества:
- Можно на лету "исправлять" ошибки
- Мы предотвращаем атоматическое прерывание исполнения программы
Блок try catch - особенности
- try catch - это единый блок, то есть данные слова в программе всегда используются "вместе"
- Действие catch не распространяется на те операторы, которые идут до блока try (распространяется только на те, что внутри try)
- Смысл использования catch - "обработать" "неприятную" ситуацию и не дать программе прервать своё выполнение.
Отображение описания исключения - вывод текстовой информации об исключении на экран
Класс Trowable (см. выше) имеет метод toString() - а потому всякое исключение можно просто передать "на печать", например в метод .println() консоли
Множественные операторы catch
- Один фрагмент кода может породить более одного исключения - в этом случае надо использовать несколько блоков catch для одного try - каждый из блоков catch попытается обработать исключение, точнее - исключение будет обрабатывать его если тип этого исключения соответствует типу параметра "ожидаемого" блоком (указывается в скобках по аналогии с аргументом функции) - после того как выполнится хотя бы один catch, все остальные его "собратья"-блоки catch пропускаются и выполнения подолжается уже за пределами связки try + catch
- Здесь важно помнить ,что обработчики (catch-блоки) подклассов исключений должны идти раньше обработчиков суперклассов - иначе обработчики подклассов просто никогда не выполнятся , даже если исключение и будет сгенерировано - а недостижимый кода в Java является ошибкой
Вложенные операторы try
- Операторы try можно вкладывать один в другой - при этом если исключение будет сгенерировано в одном из них обработчик будет искаться (опять же - подходящий обработчик, это такой, который ожидает исключение того же типа, что и то исключение которое было сгенерировано в реальности) сначала "рядом" - то есть на той же уровне вложенности ,а затем уже снаружи - всё выше и выше по иерархии, пока "поиск" не достигнет внешнего блока try - и там уже в случае отсутствия обработчика будет обработан средой исполнения Явы (Java).
- Вложенность try может и не быть столь очевидной - ведь если вызывать методы, которые сами содержат try-блок внутри некоторого "внешнего" try-блок, то мы опять же получаем вложенность - и передача обработки "наверх" (в случае если её нет "рядом") полностью соответствует принципу описанному в предыдущем пункте.
Оператор throw
Исключение можно передать и в явном виде (не дожидаясь момента, когда оно "произойдёт"), для этого используется команда формата:
throw throwablevariable;
где throwablevariable - переменная (ссылка на объект) класса или подкласса Throwable.
Получить такую ссылку можно двумя способами:
- используя оператор catch
- используя оператор new
Замечания:
- после вызова throw поток исполнения программы останавливается и никакие последующие операторы не выполняются (ищется "ближайший" обработчик - то еть ближайший закрытый блок try, имеющий оператор catch с ожиданием исключения того типа, которое только что было сгенерировано оператором throw)
- Многие "встроенные" исключения времени выполнения в Java могут принимать в качестве параметра собственного конструктора строку, в которой можно передать текстовую информацию об исключении.
Ещё:
- Log in to post comments
- 3633 reads