Sobes.tech
Назад к вопросам
Junior — Middle
52

Можешь привести пример ситуации, когда оправданно использование проверяемых исключений?

Компании, где спрашивали
ОТП БанкОТП Банк

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Проверяемые исключения оправданы там, где ошибка ожидаема и приложение может осмысленно на неё отреагировать. Обычно это взаимодействие с внешними ресурсами: файлы, сеть, база данных, ввод пользователя. Важно показать, что исключение не просто “ловят”, а используют как часть контрактов API.

Определение:

Проверяемое исключение — это исключение, которое компилятор заставляет явно обработать или пробросить дальше. Оно подходит для ситуаций, где сбой вероятен и не является программной ошибкой в чистом виде, а зависит от внешних условий. Цель — заставить разработчика принять решение: обработать проблему здесь или делегировать выше по стеку.

Пример использования:

Хороший пример — чтение файла конфигурации при старте приложения. Файл может отсутствовать, быть недоступен по правам или повреждён, и это не баг в логике программы, а внешняя проблема, которую надо либо обработать, либо сообщить наверх.

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class ConfigLoader {
    public String loadFirstLine(String path) throws IOException {
        try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
            return reader.readLine();
        }
    }

    public static void main(String[] args) {
        ConfigLoader loader = new ConfigLoader();
        try {
            String config = loader.loadFirstLine("app.properties");
            System.out.println("Loaded: " + config);
        } catch (IOException e) {
            System.out.println("Cannot load config: " + e.getMessage());
        }
    }
}

Пояснение кода:

Здесь метод loadFirstLine объявляет throws IOException, потому что чтение файла может завершиться ошибкой. Вызывающий код в main обязан либо обработать исключение в catch, либо тоже пробросить его дальше.

По шагам:

  1. Создаётся BufferedReader для чтения файла.
  2. Если файл не найден или недоступен, при создании/чтении возникнет IOException.
  3. В try-with-resources поток автоматически закрывается.
  4. В main ошибка перехватывается и выводится понятное сообщение.

Ключевые моменты:

  • Проверяемые исключения уместны там, где сбой ожидаем и связан с внешней средой.
  • Они полезны как часть контракта метода: вызывающий код заранее знает, что операция может не удаться.
  • Хорошие примеры: работа с файлами, сетью, БД, внешними сервисами.
  • Не стоит использовать их для всех подряд ошибок, особенно для ошибок программной логики.
  • Если обработать ошибку локально нельзя, её лучше пробросить выше, сохранив смысл и контекст.