Код компилируется: raiseChecked объявляет throws, а main перехватывает CheckedException. Сначала печатается Caught checked exception, затем необработанный UncheckedException завершает main.
Различия между проверяемыми и непроверяемыми исключениями в Java
Код компилируется: 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.