Результат: ученик прослеживает прекращение обычного пути и разворачивание стека, выбирает осмысленную границу обработки и не смешивает ожидаемую ошибку данных с исключительной невозможностью выполнить операцию.

Содержание:

  1. Понять возникновение исключения

    • инструкция, на которой обычное выполнение прекращается;
    • объект исключения;
    • тип, сообщение и дополнительные данные;
    • невыполнение оставшихся инструкций текущего блока;
    • поиск подходящего обработчика.
  2. Проследить разворачивание стека

    • покидание текущего метода;
    • переход к вызывающему кадру;
    • поиск catch по цепочке вызовов;
    • сохранение диагностического стека;
    • программа без подходящего обработчика.
  3. Использовать try и конкретные catch

    • минимально необходимая область try;
    • обработчик конкретного типа;
    • порядок от производного типа к общему;
    • контекст операции;
    • тип и сообщение исключения;
    • продолжение только после действительно обработанного отказа.
  4. Использовать finally

    • выполнение на обычном и аварийном пути;
    • очистка временного состояния;
    • отсутствие ложного предположения об успехе основной операции;
    • риск нового исключения из finally;
    • вложенная обработка вторичного отказа.
  5. Создавать и распространять исключение

    • throw new ... при нарушении внутреннего контракта;
    • повторная передача через throw;;
    • отличие throw exception; и влияние на StackTrace;
    • сохранение исходной причины;
    • недопустимость использования исключения как обычного ветвления.
  6. Различить ожидаемую ошибку и исключительную ситуацию

    • неверный формат;
    • значение вне предметного диапазона;
    • отсутствующее обязательное поле;
    • невозможность получить внешний ресурс;
    • нарушение внутреннего предусловия;
    • Try... и диагностический результат против исключения.
  7. Выбрать границу обработки

    • уровень, располагающий пользовательским контекстом;
    • низкий метод, который не знает политику приложения;
    • внешняя граница сценария;
    • возможность восстановления;
    • решение прекратить операцию, продолжить независимую часть или завершить программу.
  8. Не превращать отказ в ложный успех

    • пустой catch;
    • catch (Exception) без обоснования;
    • возврат пустого значения при неизвестной причине;
    • смешение пустого корректного результата и неуспеха;
    • обязательная фиксация контекста и причины.
  9. Проектировать частичный результат

    • полный успех;
    • частичный успех;
    • полный отказ;
    • состояние уже обработанных независимых элементов;
    • отмена единой операции;
    • единый и заранее определённый контракт для всего пакета.
  10. Сохранять первичную причину

    • основной отказ;
    • отказ очистки;
    • отказ попытки восстановления;
    • отдельное сообщение о вторичной проблеме;
    • невозможность гарантировать успешный откат только наличием catch.
  11. Проверять политику отказа

    • обычный путь;
    • каждый ожидаемый вид неуспеха;
    • исключение на разных уровнях цепочки;
    • исключение во время очистки;
    • состояние результатов после каждого сценария;
    • отсутствие частично опубликованного логического успеха.