Прочитав все вопросы, уже заданные на этом форуме, связанные с темой выше (см. заголовок), я полностью понимаю, что finally
всегда вызывается. (кроме System.exit
и бесконечных циклов). Однако я хотел бы знать, вызывается ли return
в блоке catch, а затем вызывается другой return
из блока finally.
Например:
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 return. Насколько я понимаю, как только возвращаемое значение в предложении catch будет оцениваться, поток управления переходит к предложению finally, которое, в свою очередь, имеет еще один возврат, на этот раз возврат будет оцениваться без передачи управления обратно в предложение catch . Таким образом, единственный return
, вызываемый во время выполнения, будет окончательным возвратом. Согласны ли вы с этим?
return
в finally
не возвращает управление программе, а возвращает значение и завершает метод. Можем ли мы так сказать?