Sobes.tech
Назад к вопросам
Middle
123
questionbank

Приведи примеры, где ты использовал проверяемые исключения (checked exceptions) в своём коде.

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

sobes.tech AI

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

Понимание, зачем в Java вообще нужны checked exceptions и когда их уместно использовать. Важно показать, что такие исключения применяются для ожидаемых и обрабатываемых ошибок, которые нельзя игнорировать на уровне контракта API. Хороший ответ обычно содержит практический пример из файловой, сетевой или интеграционной логики.

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

Checked exceptions — это исключения, которые компилятор заставляет либо обработать через try/catch, либо явно объявить в сигнатуре метода через throws. Их используют для ситуаций, где ошибка предсказуема и вызывающий код должен принять решение: retry, fallback, показать сообщение пользователю или корректно завершить операцию.

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

Чаще всего checked exceptions встречались при работе с файлами, сетевыми запросами и внешними API. Например, при чтении конфигурации из файла метод может выбрасывать IOException, потому что файл может отсутствовать, быть недоступен или повреждён.

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 void printConfig(String path) {
        try {
            String line = loadFirstLine(path);
            System.out.println("Config: " + line);
        } catch (IOException e) {
            System.out.println("Не удалось прочитать конфиг: " + e.getMessage());
        }
    }
}

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

Код показывает типичный случай, где checked exception оправдан. Метод loadFirstLine не знает, как именно приложение должно реагировать на ошибку чтения файла, поэтому он только сообщает о проблеме через throws IOException. Метод printConfig уже находится на уровне, где можно принять решение: обработать ошибку и вывести сообщение.

Шаги работы:

  1. loadFirstLine открывает файл через FileReader.
  2. Если файл недоступен или чтение ломается, возникает IOException.
  3. В try-with-resources поток закрывается автоматически.
  4. printConfig вызывает метод и перехватывает исключение.
  5. На уровне вызывающего кода можно заменить вывод на логирование, повторную попытку или дефолтное значение.

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

  • Checked exceptions уместны там, где ошибка ожидаема и у вызывающего кода есть осмысленная стратегия реакции.
  • Они являются частью контракта метода и заставляют явно думать об обработке ошибок.
  • Частые примеры: IOException, SQLException, ошибки работы с внешними ресурсами.
  • Не стоит использовать checked exceptions для всего подряд: это может засорять API и усложнять код.
  • В бизнес-логике и внутренних слоях иногда предпочтительнее unchecked exceptions, если ошибка означает нарушение инварианта, а не нормальную ожидаемую ситуацию.
  • На собеседовании полезно показать не только факт использования, но и объяснить, почему именно checked exception был выбран в конкретном месте.