Что выведет код Middle Исключения обновлено

Что выведет: return в finally глотает исключение

Вопрос

Что выведет программа (Java 21)? Каждый вывод println с новой строки.

public class Main {
    static String f() {
        try {
            throw new RuntimeException("boom");
        } finally {
            return "finally";
        }
    }
    static String g() {
        try {
            System.out.println("try");
            return "try";
        } finally {
            System.out.println("cleanup");
        }
    }
    public static void main(String[] args) {
        System.out.println(f());
        System.out.println(g());
    }
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: finally, try, cleanup, try. В f исключение летит из try, но return в finally отменяет его и возвращает строку.

Что выведет

finally
try
cleanup
try

Разбор

В f исключение летит из try, но return в finally отменяет его и возвращает строку. В g сначала печатается try, значение для return запоминается, затем выполняется finally с cleanup, и только потом main печатает результат.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.