加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 03:12:22 所属栏目:Java 来源:网络整理
导读:这看起来像一个愚蠢的问题,但我发现很难做到这一点.我问过不同的人,但无法得到理想的答案. 我想知道在Java中调用普通方法后会发生什么(在单线程环境中提供). 我的理解是: 所有当前堆栈变量都是加速并存储在某处(在哪里?) 当前方法调用暂停 新调用方法的参
这看起来像一个愚蠢的问题,但我发现很难做到这一点.我问过不同的人,但无法得到理想的答案.

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

我的理解是:

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

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

非常感谢.

解决方法

不,这实际上相当准确:

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

2)当前方法暂停

3)新调用方法的参数被推送到堆栈

4)方法代码运行

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

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

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

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

附录:

@Kevin –

>从概念上讲,我认为你说得对.我澄清了几点,希望有所帮助.
>如果你想深入了解JVM如何实现“方法调用”,David Wallace的链接非常好.
>这是一个关于“堆栈”如何工作的很好的概述.任何堆栈,调用任何子程序 – 不仅仅是Java:http://en.wikipedia.org/wiki/Call_stack
>最后,Marko Topolnik是正确的. “现实”几乎总是很复杂,它不适合简单,一刀切的答案.但我绝对认为你的理解是好的.至少在10000英尺的高度.

恕我直言…

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读