方法调用认识①

来源:互联网 发布:脑洞网络用语 编辑:程序博客网 时间:2024/06/08 06:03

1.理解方法调用  

x.f(string) 编译器查看对象的声明类型和方法名,然后索引该类中所有名为f的方法以及超类中声明为public 的f方法。至此,编译器找到所有可能被调用的候选方法。

然后编译器根据方法的签名,即显式参数的类型来选择调用的方法。从所有名为f的方法中找到参数类型完全匹配的方法的过程 称为重载解析。

如果方法为private,static,final方法,那么编译器就会准确的知道调用那些方法,这种调用方法称为静态绑定。

相较于上面的静态绑定,程序运行期间,java虚拟机根据实际类型选择最合适的方法调用,称为动态绑定。Java虚拟机根据x的实际类型,找到方法进行调用。

由于每次调用方法都需要进行索引,开销非常大。因此Java虚拟机在运行时为每个类创建了一个方法表。方法表中列出所有方法以及方法签名和所调用的方法。这样一来,调用方法时,虚拟机只要查看这张表就可以了。