静态分配和动态分配

分派是java三大特性中 (封装 继承 多态 )多态的一种体现,多态包含重载和重写,重载是静态分派 重写是动态分派

这里所说的静态分派和动态分派其实就是方法调用的一种方式,除此还有解析调用(一般性的调用,在jvm 加载类的时候符号引用转化我直接引用)

静态分派举例子:

原因就是 静态分派 他实际上 使用的是编译类型

动态分派:

举例子:重写
那重写虚拟机是怎么实现的?
invokevirtual指令
那这个指令具体有哪个作用,或者过程?
操作数栈顶找到实际对象类型
去这个类型里根据方法的名称和描述找,没找到就去父类找,如果还是没找到丢异常
重写的本质
invokevirtual指令就会把运行时常量池中符号引用解析为不同的直接引用,这就是方法重写的本质。

虚拟机动态分派的实现
虚方法表
虚方法表中存放着各个方法的实际入口地址(由于Java虚拟机自己建立并维护的方法表),如果子类没有覆盖父类的方法,那么子类的虚方法表里面的地址入口与父类是一致的;如果重写父类的方法,那么子类的方法表的地址将会替换为子类实现版本的地址。
初始化时期:
方法表是在类加载的连接阶段(验证、准备、解析)进行初始化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值