Java方法调用

本文深入探讨了在对象上应用方法调用的过程,包括编译器如何进行重载解析,以及静态绑定与动态绑定的区别。通过理解这些概念,开发者可以更好地掌握方法调用的底层机制。
弄清楚如何在对象上应用方法调用非常重要,下面是调用过程的详细描述

一、编译器查看对象的声明类型和方法名,在所有方法中有可能出现多个名字相同,但参数不一样的构造方法。编译器会意义列举所有当前类中的方法和其父类中访问属性为Public且名字与调用方法名相同的方法。

二、在执行第一步以后,编译器将会查看调用方法时提供的参数类型。如果在所有名与调用方法名相同的方法中存在一个与提供参数类型完全匹配,就选择这个方法。这个过程被称为 重载解析。如果编译器没有找到与参数类型类型匹配的方法,或者发现经过类型转换后有多个方法与之匹配,就会报告一个错误。

三、如果是private方法、static方法、final方法或者构造器,那么编译器将会准确的知道应该调用哪个方法,我们把它称为 静态绑定

静态绑定:也叫前期绑定,指编译时就可以回到方法所属的类,并与之建立连接

动态绑定:也叫后期绑定,指运行时才可以知道方法的实际类型,并与之建立连接。

四、当程序运行,并采用动态绑定调用方法时,虚拟机一定调用与类所引用对象的实际类型最合适的那个累的方法。假设x的实际类型是D,他是C类的子类。如果D预先定义了方法,就直接调用它,否则将会在D的父类C中寻找,以此类推。

事实上,虚拟机预先为每个类创建了一方法表(method table),其中列出了所有方法的签名和实际调用的方法。这样一来,在调用方法的时候,虚拟机仅查找这个表就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

稷下学员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值