Различия между проверяемыми и непроверяемыми исключениями в Java

Код компилируется: raiseChecked объявляет throws, а main перехватывает CheckedException. Сначала печатается Caught checked exception, затем необработанный UncheckedException завершает main.

Короткий ответ

Что ответить на собеседовании

Код компилируется: raiseChecked объявляет throws, а main перехватывает CheckedException. Сначала печатается Caught checked exception, затем необработанный UncheckedException завершает main.

Подробный разбор

Ответ с пояснениями

Условие

В примере объявлены два пользовательских исключения: CheckedException, наследующий Exception, и UncheckedException, наследующий RuntimeException. При попытке выполнить throw new CheckedException(); компилятор выдаёт ошибку, потому что проверяемое исключение должно быть либо обработано в try‑catch, либо объявлено в сигнатуре метода с помощью throws. Чтобы устранить ошибку, необходимо добавить throws CheckedException к объявлению метода или обернуть вызов в блок try { … } catch (CheckedException e) { … }. Непроверяемое исключение UncheckedException компилятором не требует такой обработки.

public class JetbulbInterview {
    public static void main(String[] args) {
        // пример вызова методов
        try {
            raiseChecked();
        } catch (CheckedException e) {
            System.out.println("Caught checked exception");
        }
        raiseUnchecked();
    }

    static void raiseChecked() throws CheckedException {
        throw new CheckedException();
    }

    static void raiseUnchecked() {
        throw new UncheckedException();
    }
}

class CheckedException extends Exception {}

class UncheckedException extends RuntimeException {}

Ответ

Код компилируется: raiseChecked объявляет throws, а main перехватывает CheckedException. Сначала печатается Caught checked exception, затем необработанный UncheckedException завершает main.

Checked-исключения требуют catch или объявления throws в вызывающей цепочке. RuntimeException и Error относятся к unchecked и такой проверки компилятора не требуют. Это не означает, что их невозможно или никогда не нужно обрабатывать. Выбор вида исключения отражает контракт и возможность восстановления, а не только желание избежать throws.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее