Java核心技术——方法调用

关于java方法调用过程的理解:

前提:有两个类,分别为ABB继承自A,即AB的超类,BA的子类),对象x声明为B的一个对象,假设调用x.fun(params)

1、编译器查看对象的方法名和声明类型。

获取所有可能被调用的方法:类中可能会存在很多名为fun但参数类型不一样的方法。编译器会列举B类中所有名为fun和超类A中访问属性为public且名为fun的方法。

2、编译器查看调用方法时提供的参数类型。

找出最合适被调用的那个方法:当在所有名为fun的方法中存在一个与提供的参数类型完全匹配的方法,那么就选择这个。
注意:如果编译器没有找到与参数类型匹配的方法,或者经过类型转换后发现有多个方法与之匹配的话,就会报错

3、静态绑定:如果是privatestaticfinal或者构造器方法,则编译器可以准确的知道应该调用哪个方法。动态绑定:调用的方法依赖于隐式参数的实际类型,并且在运行时实现动态绑定。
4、程序运行时,并且采用动态绑定调用方法,虚拟机一定调用与x所引用对象的实际类型最合适的那个类的方法。如x的实际类型是BB又是A的子类,那么如果B定义了方法fun(params),就直接调动它,否则在超类A中寻找fun(params),以此类推。

由于每次调用方法都进行搜索,开销是比较大的,所以虚拟机会预先为每个类创建一个方法表,这个方法表中列出了所有方法的签名(方法签名:包括方法名和参数)和实际调用的方法。这样在调用方法的时候,直接查表就可以了。

内容参考书籍:“Java核心技术 卷1

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 13,035评论 0 13
  • 突然觉醒了。减肥,攒钱,大三割个双眼皮。从今天起每天写日记。打卡求支持求监督。
    卷帘人不在乎阅读 1,337评论 0 0
  • 他们都说,初恋对于一个男人来讲是不可磨灭的记忆。每每看到这样的话,我三分庆幸,七分心酸。 你都如何回忆我,带...
    Thorn唐阅读 4,270评论 38 35
  • 坐在土丘上,有大把的时间慢慢坐空一朵云闲起来就把好天气搬上搬下一头水牛在这样的日子就是生活本身总有土灰的皮毛能掩饰...
    南方小余阅读 1,589评论 2 3
  • 心猿意马 并不活在当下 心是直的 看见花就变成花 文是曲的 顾左右而言他 是孩子,童心未眠 是老者,早已忘言
    西村1983阅读 2,144评论 6 1

友情链接更多精彩内容