33. Исключительные ситуации — неожиданные. Возможности для их обработки.
При возникновении исключения в блоке try просматриваются блоки catch в том порядке, в каком они объявлены. Как только обнаруживается блок обработки ошибок нужного типа, управление передаётся ему. Остальные блоки catch не используются. Если же выполнение блока try завершилось успешно, все блоки catch после него игнорируются. Если для некоторого типа ошибки не обнаружено соответствующего блока catch, программа завершается аварийно. Чтобы этого избежать, последним в цепочке можно разместить блок catch(…), перехватывающий ошибки любого типа. Как только подходящий блок catch будет вызван, особая ситуация будет считаться обработанной, даже если этот блок пуст. Однако чаще всего в него помещают выдачу на экран или в специальный файл (журнал) содержательного сообщения об ошибке. Возможно также одно из следующих действий:
- устранение причины ошибки (уменьшение запроса на выделение памяти, отказ от обработки несуществующего или испорченного файла и т. п.);
- аварийное завершение программы (вызов abort( ));
- перевозбуждение особой ситуации для передачи на следующий уровень иерархии (вызов throw без аргумента).
try { ... } catch (Error e) { ... } catch (...) { ... }