Определение вывода при пере‑бросе исключений в вложенных блоках try‑catch‑finally

После оформления фрагмента как корректного main будут напечатаны 1, 2 и 4. Затем наружу выйдет RuntimeException с сообщением my second Exception; finish не напечатается.

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

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

После оформления фрагмента как корректного main будут напечатаны 1, 2 и 4. Затем наружу выйдет RuntimeException с сообщением my second Exception; finish не напечатается.

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

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

Условие

Нужно предсказать, какой текст будет напечатан в консоли при выполнении программы, содержащей вложенные блоки try‑catch‑finally с пере‑бросом исключений.

main {
    try {
        System.out.println("1");
        throw new RuntimeException("my own Exception");
    } catch (RuntimeException e) {
        System.out.println("2");
        throw new RuntimeException("my second Exception");
    } catch (Exception e) {
        System.out.println("3");
    } finally {
        System.out.println("4");
    }

    System.out.println("finish");
}

Ответ

После оформления фрагмента как корректного main будут напечатаны 1, 2 и 4. Затем наружу выйдет RuntimeException с сообщением my second Exception; finish не напечатается.

Первое исключение попадает в catch(RuntimeException), который печатает 2 и бросает другое. Соседний catch(Exception) не перехватывает исключения из catch, поэтому 3 не появится. finally выполнится до выхода и напечатает 4. Следующая после всей конструкции инструкция не достигается при этом запуске. Форма main { в условии — псевдокод; для Java нужна обычная сигнатура public static void main(String[] args).

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

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

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

Подробнее