java中的程序绑定和方法调用

静态绑定&的动态绑定

1.静态绑定

编译期间绑定,java当中的方法只有final,static,private和构造方法的调用是静态绑定。

2.动态绑定

在运行时根据具体对象的类型进行绑定。

步骤:1>虚拟机提取对象的实际类型的方法表

2>虚拟机搜索方法表找到匹配的方法

3>调用方法

方法调用

1:编译器检查对象的声明类型和方法名。假设我们调用x.f(args)方法,并且x已经被声明为C类的对象,那么编译器会列举出C类中所有的名称为 f 的方法和从C类的超类继承过来的 f 方法

2:接下来编译器根据提供的参数类型。如果在所有名称为f 的方法中有一个参数类型和调用提供的参数类型最为匹配,那么就调用这个方法,这个过程叫做“重载解析

3:当程序运行并且使用动态绑定调用方法时,虚拟机必须调用与 x 所指向的对象的实际类型最合适的那个类的方法。假设实际类型为D(C的子类),如果D类定义了f(String)那么该方法被调用,否则就在D的超类中搜寻方法f(String)。

每次搜索调用方法时间开销非常大,因此,虚拟机为每个类创建了一个方法表,列出了所有方法签名和实际调用的方法。这样一来,调用方法的时候查找方法表即可。

猜你喜欢

转载自blog.csdn.net/qq_36897901/article/details/91493512
今日推荐