Найти тему
DEBAGanov

Java 781. Если оператор return содержится и в блоке catch и в finally, какой из них “главнее”?

Если оператор return содержится и в блоке catch и в блоке finally, то в конечном итоге возвращаемое значение будет зависеть от того, было ли выброшено исключение и было ли оно обработано.

Если исключение было выброшено, то выполнение перейдет в блок catch, и значение, возвращаемое в блоке catch, будет являться конечным результатом. Если исключение не было выброшено, то выполнение перейдет в блок finally, и значение, возвращаемое в блоке finally, будет являться конечным результатом.

Это довольно сложное поведение, и в целом не рекомендуется иметь оператор return в обоих блоках. Вместо этого рекомендуется использовать только один оператор return, и помещать его в блок try перед блоком catch и finally.

Например, вот как это может выглядеть на Java:

public static int myMethod() {
try {
// некоторый код, который может вызвать исключение
return 1;
} catch (Exception e) {
// обрабатывать исключение
return 2;
} finally {
// какой-то код, который всегда работает
return 3;
}
}

Здесь будет возвращено значение 3, потому что блок finally всегда выполняется, а оператор return в блоке finally имеет приоритет по отношению к операторам return в блоках try и catch.

1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions

Tелеграмм канал: https://t.me/DEBAGanov

Мое резюме: https://github.com/DEBAGanov