JAVA对象怎样实现对一个方法的调用的?

举个例子:

public class Example{
public static void main(String[] args){
//Bean 对象
Bean b = new Bean();
b.way();
}
}
class Bean{
private int num =0;
public Bean(){
this.num = 5;
}
public void way(){}
}

这里把JVM当做一个实例对象
JVM j = new JVM();
首先,JAVA虚拟机在执行一个主程序Main方法之前,先创建一个虚拟机的实例,在虚拟机创建实例就拥有一个堆一个方法区,实例就会启动线程来执行Main方法,(所有的Java程序的入口必须执行Main方法的).方法执行完后,类装载器会编译
.class的文件,并将读取到的类信息放到方法区.并且把读取到的(二进制的)类信息返回给JVM,JVM得到类型信息后,会立即取得ClassName,比如Bean, 并且在JAVA栈中入栈一个对Bean类型的引用,
Bean b ;并且有一个指向堆的指针,由Bean b 指向堆的指针,堆中的指针还会指向一个方法区的指针(用来存放方法)。当用new运算符的时候,会在堆中分配内存,把类型信息放进方法区中,并初始化类中的成员变量 int num = 0.这时候,调用new 之后的构造函数之后的时候,才真正的为对象分配内存(至于分配多大的内存,由JVM所读取的类型信息来决定),即 int num =5; 栈中的Bean b 的指针会指向堆中的对象。
并且在堆中还有一个指向方法区取得指针,这时候指针就会到方法区找到它所对应的way方法.
就完成了Java对象对方法的调用.


1 . 利用反射获得类名
2 . 找到,读入.class文件
3 . 提取类型信息到方法表
4 . 执行Main方法
5 . 在常量池以列项分配空间
6 . 判读.class文件是否加载
7. 如果成功加载,就获得对象类名得应用,否查找.class文件把信息放入方法区
8. JVM一个指向方法区的类数据结构指针替换到常量池的第一项
9. 为对象分配内存,并且用常量池中的第一项指针访问类型信息
10. 确定对象的大小,堆里分配,初始化实例化的变量 num=0;
11 生成对象的引用压入栈中
12.通过调用JAVA代码初始化成员变量,初始化正确的初始值 num=5
13. 通过对象引用调方法 (b.way())
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值