Возвращение значения от функции

Как делает возвращение значения от функции, внутренне работает?

Посмотрите этот пример..

alt text

7
задан Glorfindel 24 July 2019 в 09:05
поделиться

2 ответа

JVM использует стек значений для хранения значений, и этот стек является общим для всех вызовов методов в этом потоке. Обычно, когда возвращается непустой метод, возвращаемое значение помещается в стек, а вызывающий объект извлекает его из стека и либо использует, либо отбрасывает.

7
ответ дан 7 December 2019 в 03:13
поделиться

JLS 14.17 return Заявление

{{ 1}}

[...] Оператор return без Выражения пытается передать управление вызывающей стороне метода или конструктора, который его содержит.

[...] Оператор return с Выражением пытается передать управление вызывающей стороне метод, который его содержит; значение Выражения становится значением вызова метода.

[...] Таким образом, можно видеть, что оператор return всегда завершается внезапно.

Внезапное завершение действительно означает, что любые последующие операторы не будут выполняться, и это может фактически привести к ошибке времени компиляции в некоторых случаях ( JLS 14.21 Unreachable Statements )

void unreachable() {
   return;
   System.out.println("Bye!"); // DOESN'T COMPILE! Unreachable code!
}

Продолжая ...

В предыдущих описаниях говорится, что « пытается передать управление», а не просто «передает управление», потому что, если есть какие-либо команды try [... ] тогда любые предложения finally [...] будут выполнены [...] Внезапное завершение предложения finally может прервать передачу управления, инициированную return заявление.

Это означает, что следующая функция вернет -1 вместо 0 .

int tryReturn() {
   try {
      return 0;
   } finally {
      return -1;
   }
}

Однако при отсутствии try-finally управление будет немедленно передано, а значение Expression , если оно есть, будет передано вызывающей стороне.

2
ответ дан 7 December 2019 в 03:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: