Всякий раз, когда исключение можно ожидать, но его нельзя избежать.
Скажем, если вы используете какой-то внешний API для анализа данных, и этот API предлагает методы синтаксического анализа, но ничего не говорит о том, может ли быть проанализирован данный ввод или нет (или может ли анализ быть успешным или нет, зависит на факторы вне вашего контроля, но API не обеспечивает соответствующие вызовы функций), и метод синтаксического анализа выдает исключение, когда входные данные не могут быть проанализированы.
При правильно разработанном API это должно сводиться к количеству где-то в диапазоне от «практически никогда» до «никогда».
Я не вижу абсолютно никакой причины использовать обработку исключений как средство нормального управления потоком в коде. Это дорого, трудно читать (просто посмотрите на свой первый пример; я понимаю, что он, вероятно, был написан очень быстро, но когда _map
не был инициализирован, в результате получается пустая карта, отбрасывающая запись Вы пытались добавить), и он напичкан кодом бесполезными блоками try-catch, которые могут очень хорошо скрыть real проблемы. Опять же, взяв собственный пример, что если бы вызов _map.add()
вызвал бы NullPointerException
по какой-то причине , отличающийся , отличным от _map
, являющимся null
? Внезапно вы молча воссоздаете пустую карту, а не добавляете в нее запись. Что, я уверен, мне и не нужно говорить, может привести к любому количеству ошибок в совершенно не связанных местах кода из-за неожиданного состояния ...
Редактировать: Просто чтобы прояснить, ответ выше написан в контексте Java. Другие языки могут (и, очевидно, могут) отличаться в реализации за счет исключений, но другие пункты все же должны соблюдаться.