Ответ
Проверяемые исключения (checked exceptions) в Java — это исключения, которые компилятор заставляет явно обрабатывать или пробрасывать. Их использование вызывает споры в сообществе.
Преимущества:
- Принудительная обработка ошибок: Компилятор гарантирует, что разработчик предусмотрел возможные сбои, что повышает надежность кода.
- Явный контракт: Сигнатура метода явно объявляет, какие исключения он может выбросить, что служит документацией.
Недостатки:
- Избыточный код (boilerplate): Часто приводит к цепочкам
try-catchили объявлениямthrows, которые загромождают код, особенно когда исключение не может быть осмысленно обработано на текущем уровне. - Нарушение инкапсуляции: Вынуждает раскрывать детали реализации (типы исключений) вышележащим слоям.
- Сложность с лямбда-выражениями: Функциональные интерфейсы в Stream API и других местах не поддерживают проверяемые исключения, что усложняет их использование.
Пример проверяемого исключения:
public void readFile(String path) throws IOException { // Должно быть объявлено
BufferedReader reader = new BufferedReader(new FileReader(path));
// ...
}
Современный подход: Для многих сценариев предпочтительнее использовать непроверяемые исключения (наследники RuntimeException), которые не требуют обязательного объявления. Это делает код чище, а обработку ошибок — более централизованной (например, через глобальный обработчик @ControllerAdvice в Spring). Проверяемые исключения остаются уместными для действительно ожидаемых и восстановимых ошибок (например, FileNotFoundException при работе с пользовательским вводом).