Когда вы запрашиваете предложение о том, как обрабатывать исключения ...
Нет общепринятого способа справиться с ними. В противном случае, вы держите пари, что Java-язык будет иметь такое поведение.
- Исключения не являются ограничением низкого уровня, с которым нужно иметь дело, пока компилятор не станет достаточно умным.
- Исключения - это языковая конструкция высокого уровня, используемая для выражения семантики "произошло что-то исключительное, чье обращение вы не хотите смешивать с обычным кодом; вы предпочитаете, чтобы оно обрабатывалось в определенных кодах".
Исключения существуют в двух формах:
- Проверенные исключения должны быть явными в каждом методе, который может их генерировать.
- Непроверенные исключения (подклассы RuntimeException или Error) обычно являются неявными.
На каждом уровне кода (метод или блок) код должен выбирать, что делать в случае любого исключения (кроме непроверенных исключений, которые могут вообще пропустить обработку). Это выбор ответственности, который варьируется, и не существует решения, действительного для всех случаев:
- PROCESS : перехватить и полностью обработать (вызывающие коды обычно не знают, что что-то произошло). Текущий метод должен нести ответственность. Регистрация трассировки стека для разработчика может быть полезной.
- STEP : поймайте его, выполните шаг обработки, связанный с локальным кодом, и перебросьте его (или перебросьте другое исключение с исходным в качестве причины).
- IGNORE : просто возьмите на себя ответственность вызывающего кода.
Язык Java позволяет вам иметь определенные синтаксисы, упрощающие обработку исключений, например, перехват определенных исключений и более общие ...
Как правило, вы учитываете исключения в своей архитектуре и принимаете некоторые проектные решения. Некоторые примеры (смешанные уникальными способами):
- выберите, чтобы один слой обрабатывал все исключения, генерируемые на более низких уровнях (например, транзакционные сервисы): ведение журнала для разработчика, позиционирование некоторой глобальной информации для пользователя ...
- разрешить некоторым исключениям увеличивать количество вызовов методов до тех пор, пока вы не попадете в код, в котором имеет смысл обрабатывать его (например, в зависимости от ваших исключений вы можете повторить полную операцию или уведомить пользователя ...)
- и т.д.