Прочитав все вопросы, заданные на этом форуме, связанные с темой выше (см. заголовок), я полностью понимаю, что finally
всегда называется. (кроме System.exit
и бесконечных циклов). Однако я хотел бы знать, вызывается ли return
в блоке catch, а затем из блока finally вызывается другой return
.
Например:
public static void main(String[]args) {
int a = new TestClass().absorbeTheValue();
}
int absorbeTheValue() {
try {
int a = 10/0;
if (a > 0) return 4;
} catch(Exception e) {
return 45;
} finally {
return 34;
}
}
Таким образом, вывод (когда будет вызван метод) будет в любом случае 34. Это означает, что, наконец, всегда запускается. Я думаю, что другие "возвращения" вообще не запускаются. Во многих сообщениях я обнаружил, что, наконец, напишу содержимое по тому, что уже было написано в результате возврата catch. Я понимаю, что как только возвращаемое значение в предложении catch должно быть оценено, поток управления переходит к предложению finally, которое, в свою очередь, возвращает другое, на этот раз результат будет оцениваться без передачи управления обратно в предложение catch, Таким образом, только return
, вызываемый во время выполнения, будет окончательным возвратом. Вы согласны с этим?
A return
в finally
не возвращает элемент управления программе, но возвращает значение и завершает метод. Можем ли мы так сказать?