“В подобной ситуации необходимо сделать по крайней мере три вещи:
Сообщить пользователю об обнаруженной ошибке.
Сохранить все результаты его работы.
Дать ему возможность аккуратно завершить работу программы.”
“Предназначение механизма обработки исключительной ситуаций - передать данные из того места, где возник сбой, обработчику ошибок, который может справиться с ними.”
“... передать данные”. Вот интересно мне, можно ли передать аргументы метода, в котором произошёл сбой, как-нибудь по-простому.
“ … язык Java в каждом методе предусматривает альтернативный выход, которым следует воспользоваться, если задачу невозможно выполнить до конца. В данной ситуации метод не станет возвращать значение, а возбудит (throw) объект, инкапсулирующий информацию об ошибке. Обратите внимание на то, что выход из метода выполняется незамедлительно. Более того, возобновить выполнение кода, вызвавшего данный метод, невозможно.”
Не очень понятно. “... возобновить выполнение кода, вызвавшего данный метод, невозможно.” Почему? Обработал ошибку - и запускай следующий метод.
“В языке Java объект исключительной ситуации всегда является экземпляром класса, производного от класса Throwable.”
“Иерархия Error описывает внутренние ошибки и ситуации, связанные с исчерпанием ресурсов в системе поддержки выполнения программ на языке Java. Ни один объект этого типа самому возбудить невозможно. Если возникла внутренняя ошибка, то … программист может сделать немногое.”
“Исключительные ситуации типа RuntimeException возникают вследствие ошибок программирования. Все другие исключительные ситуации являются следствием непредвиденного стечения обстоятельств.”
“Правило “Если возникла исключительная ситуация RuntimeException, то это - ваша вина” выполняется практически всегда.”
“В спецификации языка Java любая исключительная ситуация, производная от класса Error или RuntimeError, называется “неконтролируемой” (unchecked). Все остальные исключительные ситуации называются “контролируемыми” (checked).”
RuntimeError ?.. Это что такое? Опечатка?
Контролируемые, неконтролируемые... Не до конца понятно пока. Как-то хочется думать, что контролируемые - это те, которые можно предвидеть и программно предотвратить, например, проконтролировать правильность аргументов, а вот некотролируемые - это те, которые я даже если предвижу, то не могу с ними ничего поделать. А из текста получается наоборот...
“... метод не только сообщает компилятору, какие значения он может возвращать, но и предсказывает, какие ошибки могут возникнуть”.
“... внутренние ошибки … , производные от класса Error, объявлять не нужно. Аналогично не нужно объявлять неконтролируемые исключительные ситуации, производные от класса RuntimeException.”
"Неконтролируемые исключения либо находятся вне вашей компетенции (класс Error), либо являются следствием логических ошибок, которые не следовало допускать (класс RuntimeException)".
"Метод подкласса не может генерировать более общие исключения, чем замещаемый им метод суперкласса. В частности, если метод суперкласса вообще не генерирует контролируемые исключения, то и подкласс этого сделать не может."
Комментариев нет:
Отправить комментарий