在Java中调用方法后会发生什么

Kev*_*vin 8 java methods

这看起来像一个愚蠢的问题,但我发现它很难做到正确.我问过不同的人,但无法得到理想的答案.

我想知道在Java中调用普通方法后会发生什么(在单线程环境中提供).

我的理解是:

  1. 所有当前的堆栈变量都被加载并存储在某处(其中?)
  2. 当前方法调用暂停
  3. 新调用方法的参数被推送到堆栈
  4. 方法代码运行
  5. 方法完成运行后,再次清空堆栈并再次恢复旧堆栈内容.(如果函数返回值,会发生什么?).
  6. 代码继续使用调用方法.

这是一个非常不完整的,可能是错误的答案.有人可以提供更详细的描述吗?

非常感谢.

pau*_*sm4 4

不,这实际上相当准确:

1)当前堆栈变量保留在堆栈上

2)当前方法暂停

3)新调用的方法的参数被压入堆栈

4)方法代码运行

5) 方法运行完毕后,我们弹出堆栈。被调用方法的堆栈变量不再有效 - 此时它们不再“存在”。

6)我们将返回值(如果有)传递给调用者

7) 代码继续调用方法。它的所有堆栈变量都保持不变。

================================

附录:

@凯文-

  • 从概念上讲,我认为你的理解是正确的。我澄清了几点,希望对您有所帮助。

  • 如果您想深入了解 JVM 如何实现“方法调用”,David Wallace 的链接非常好。

  • 这里很好地概述了“堆栈”的工作原理。任何堆栈,调用任何子例程 - 不仅仅是 Java: http: //en.wikipedia.org/wiki/Call_stack

  • 最后,马尔科·托波尔尼克是正确的。“现实”几乎总是足够复杂,以至于无法提供一个简单的、一刀切的答案。但我绝对认为你的理解是好的。至少在一万英尺的高度。

恕我直言...