Что выведет код 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 ошибок.