Java ⽅法调⽤的过程是怎样的?
写在前⾯
本⽂⾪属于专栏《100个问题搞定Java》,该专栏为笔者原创,引⽤请注明来源,不⾜和错误之处请在评论区帮忙指出,谢谢!本专栏⽬录结构和⽂献引⽤请见
解答
补充
举例说明
上⾯的描述可能有点抽象,我们通过⼀个具体的例⼦来说明⽅法执⾏的过程:
当程序在 main ⽅法调⽤ Sum.sum 之前,栈的情况⼤概如图所⽰。
在 main ⽅法调⽤ Sum.sum 时,⾸先将参数 1 和 2 ⼊栈,然后将返回地址(也就是调⽤⽅法结束后要执⾏的指令地址)⼊栈,
接着跳转到 sum 函数,在 sum 函数内部,需要为局部变量 c 分配⼀个空间,⽽参数变量 a 和 b 则直接对应于⼊栈的数据 1 和 2,在返回之前,返回值保存到了专门的返回值存储器中。
在调⽤ return 后,程序会跳转到栈中保存的返回地址,即 main 的⼀条指令地址,⽽ sum 函数相关的数据会出栈,从⽽⼜变回上图中的样⼦。
main 的下⼀条指令是根据⽅法返回值给变量 d 赋值,返回值从专门的返回值存储器中获得。⽅法(Java 中称为⽅法,其他语⾔⼀般称为函数)调⽤主要是通过栈来存储相关的数据,系统就⽅法调⽤者和⽅法如何使⽤栈做了约定,返回值可以简单认为是1public  class  Sum {    public  static  int  sum (int  a , int  b ){        int  c = a * b ;        return  c ;    }    public  static  void  main (String [] args ){        int  d = Sum .sum (1, 2);        System .out .println (d );    }}
1
2
3
4
reer5
6
7
8
9
10
11
sizeof是不是一个函数
程序执⾏的基本原理
CPU有⼀个指令指⽰器,指向下⼀条要执⾏的指令,要么顺序执⾏,要么进⾏跳转(条件跳转或⽆条件跳转)。dubbo是长链接还是短链接
具体到Java程序来说就是,程序从 main ⽅法开始顺序执⾏,⽅法调⽤可以看作⼀个⽆条件跳转,跳转到对应⽅法的指令处开始执⾏,碰到 return 语句或者⽅法结尾的时候,再执⾏⼀次⽆条件跳转, 跳转回调⽤⽅,执⾏调⽤⽅法后的下⼀条指令。
上述流程存在下⾯的问题
1. 参数如何传递?
linux云计算好学吗2. ⽅法如何知道返回到什么地⽅?
3. ⽅法结果如何传给调⽤⽅?
解决思路
使⽤内存存放这些数据,⽅法调⽤⽅和⽅法⾃⼰就如何存放和使⽤这些数据达成⼀个⼀致的协议或约定。
这个约定就是栈。java下载过程
sumif有3个条件参数操作数栈 VS 寄存器
详情请见我的另⼀篇博客——

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。