Author: Oscar
目录
- 函数与方法的区别
- Java调用方法的过程
函数与方法的区别
函数与方法在不同的场景下,叫法不同。函数一般出现在面向过程,比如C语言,通过函数名就可以调用这个函数。而方法一般出现在面向对象,与对象相关联,通过对象调用里面的方法。
Java调用方法的过程
当Java启动一个线程的时候,就会创建一个栈。每当线程执行一个方法的时候,就会压入一个栈帧。只有处于栈顶的栈帧才是最有效的,称为当前栈帧,即当前方法。注意,当前方法没有返回或抛异常中断时,当前栈帧是不会出栈的。
栈帧:主要由四部分组成,分别是局部变量表(Local Stack Frame)、操作数栈(Operand Stack)、动态链接(Dynamic Linking)以及返回地址(Reture Address)。
- 局部变量表:保存函数的参数以及局部变量用
- 操作数栈:存放一些操作后的结果
示例
Java Code :
1 | public class Main { |
ByteCode
1 | 0: iconst_1 //把常量1 放到操作数栈顶 |
栈帧组成结构
习题一
1 | public class Main { |
方法调用过程
1.当主线程启动的时候,就会创建一个栈。执行main函数,创建main帧,并压入栈。
2.当主线程执行swap方法时,创建swap帧,并压入栈,注意:同时把main帧的a=1,b=2的数值也拷贝一份,在swap帧也创建了变量a和b,因此,修改swap帧的变量,也不会影响main帧的变量。经过一系列操作,swap帧里的变量a=2,b=1,t=1。这是传值,适用于Java的基础数据类型,如int,float,double等等
3.当执行完swap方法时,swap帧就会出栈,swap帧里的变量a,b,t也会随着出栈而被回收。
习题二
1 | public class Main { |