方法绑定
方法的绑定分为静态绑定和动态绑定
- 静态绑定:
静态绑定(前期绑定,编译绑定),类中哪些方法是静态绑定的呢?
- private,私有方法
- super方法
- static方法
- 构造方法
静态绑定的方法,在类上存储方法指针,指针指向方法对象。
-
动态绑定:
动态绑定(后期绑定,运行时绑定),存在类型多态,只有运行的时候,才能确定最终的形态。
哪些是动态绑定呢?- 非私有方法
- 接口方法
-
方法重写
子类重写父类的方法,并且方法名称、参数类型、参数个数都相同,叫做方法重写,也正式Java的多态。
方法表
方法表,是类在加载的时候,在方法区生成的一个数组,里面存储类的方法的指针,指向方法对象。
- 优点:空间换时间,加快目标方法的查找时间。
- 子类继承父类的方法:
如果,子类重写类父类的方法,那么子类方法表中指向的是子类的方法对象。
如果,子类没有重写父类的方法,那么子类方法表中指向的是父类的方法对象。
jvm是怎么识别方法的
jvm识别方法的关键在于「类名+方法名+方法描述」。备注:方法描述是参数类型和返回值类型。
怎么调用方法
- 静态绑定的方法是如何被找到的?
- 先找到类
- 然后,找到类中方法的指针,再去调用方法对象
- 动态方法是如何被找到的?
- 根据调用者的动态类型(栈的局部变量表中)
- 根据动态类型,找到方法区中的方法表
- 在方法表中,找到具体的指针,再去找到方法对象