我是菜鸟:java中方法的调用过程

方法调用

方法调用的目的是确定被调用方法的版本。

预备知识复习

Class文件在编译的过程中,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(直接引用),需要在类的加载期间甚至是运行期间才能确定目标方法的直接引用。(这样做的好处是动态扩展能力的增强。)

解析

在类加载解析阶段,将符号引用转化为直接引用的过程,调用目标在程序代码写好,编译器进行编译的时候就必须确定下来,这类方法的调用称为 解析
解析是一个静态的过程,在编译器就完全确定,在装载的解析阶段就会将涉及的符号引用全部转为可确定的直接引用。
这类的方法(叫做非虚方法)主要包括:静态方法 和 私有方法, 实例构造器和父类方法, final方法。

分派

分派调用 可能为静态或者动态的,主要分为 静态(动态)单(多)分配4种情况。下面复习虚拟机是如何确定正确目标方法。

静态分派

Human man = new Man( );
其中Human 称为 变量的静态类型, 而Man 为变量的实际类型。 静态类型的变化仅仅在使用时变化,变量的本身的静态类型不会被改变,并且最终的静态类型在编译器可知的; 而实际类型变化的结果在运行期才可以确定,编译器在编译程序的时候并不知道一个对象的实际类型是什么。(其实不太明白)
所有依赖静态类型来定位方法执行版本的分派动作,都称为静态分配。

动态分配

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值