Результат: ученик прослеживает прекращение обычного пути и разворачивание стека, выбирает осмысленную границу обработки и не смешивает ожидаемую ошибку данных с исключительной невозможностью выполнить операцию.
Содержание:
-
Понять возникновение исключения
- инструкция, на которой обычное выполнение прекращается;
- объект исключения;
- тип, сообщение и дополнительные данные;
- невыполнение оставшихся инструкций текущего блока;
- поиск подходящего обработчика.
-
Проследить разворачивание стека
- покидание текущего метода;
- переход к вызывающему кадру;
- поиск
catchпо цепочке вызовов; - сохранение диагностического стека;
- программа без подходящего обработчика.
-
Использовать
tryи конкретныеcatch- минимально необходимая область
try; - обработчик конкретного типа;
- порядок от производного типа к общему;
- контекст операции;
- тип и сообщение исключения;
- продолжение только после действительно обработанного отказа.
- минимально необходимая область
-
Использовать
finally- выполнение на обычном и аварийном пути;
- очистка временного состояния;
- отсутствие ложного предположения об успехе основной операции;
- риск нового исключения из
finally; - вложенная обработка вторичного отказа.
-
Создавать и распространять исключение
throw new ...при нарушении внутреннего контракта;- повторная передача через
throw;; - отличие
throw exception;и влияние наStackTrace; - сохранение исходной причины;
- недопустимость использования исключения как обычного ветвления.
-
Различить ожидаемую ошибку и исключительную ситуацию
- неверный формат;
- значение вне предметного диапазона;
- отсутствующее обязательное поле;
- невозможность получить внешний ресурс;
- нарушение внутреннего предусловия;
Try...и диагностический результат против исключения.
-
Выбрать границу обработки
- уровень, располагающий пользовательским контекстом;
- низкий метод, который не знает политику приложения;
- внешняя граница сценария;
- возможность восстановления;
- решение прекратить операцию, продолжить независимую часть или завершить программу.
-
Не превращать отказ в ложный успех
- пустой
catch; catch (Exception)без обоснования;- возврат пустого значения при неизвестной причине;
- смешение пустого корректного результата и неуспеха;
- обязательная фиксация контекста и причины.
- пустой
-
Проектировать частичный результат
- полный успех;
- частичный успех;
- полный отказ;
- состояние уже обработанных независимых элементов;
- отмена единой операции;
- единый и заранее определённый контракт для всего пакета.
-
Сохранять первичную причину
- основной отказ;
- отказ очистки;
- отказ попытки восстановления;
- отдельное сообщение о вторичной проблеме;
- невозможность гарантировать успешный откат только наличием
catch.
-
Проверять политику отказа
- обычный путь;
- каждый ожидаемый вид неуспеха;
- исключение на разных уровнях цепочки;
- исключение во время очистки;
- состояние результатов после каждого сценария;
- отсутствие частично опубликованного логического успеха.

