После оформления фрагмента как корректного main будут напечатаны 1, 2 и 4. Затем наружу выйдет RuntimeException с сообщением my second Exception; finish не напечатается.
Определение вывода при пере‑бросе исключений в вложенных блоках try‑catch‑finally
После оформления фрагмента как корректного 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).