关于Java中的方法的基本理解

方法绑定

方法的绑定分为静态绑定和动态绑定

  • 静态绑定:

    静态绑定(前期绑定,编译绑定),类中哪些方法是静态绑定的呢?

    • private,私有方法
    • super方法
    • static方法
    • 构造方法

静态绑定的方法,在类上存储方法指针,指针指向方法对象。

  • 动态绑定:

    动态绑定(后期绑定,运行时绑定),存在类型多态,只有运行的时候,才能确定最终的形态。
    哪些是动态绑定呢?

    • 非私有方法
    • 接口方法
  • 方法重写

    子类重写父类的方法,并且方法名称、参数类型、参数个数都相同,叫做方法重写,也正式Java的多态。

方法表

方法表,是类在加载的时候,在方法区生成的一个数组,里面存储类的方法的指针,指向方法对象。

  • 优点:空间换时间,加快目标方法的查找时间。
  • 子类继承父类的方法:

    如果,子类重写类父类的方法,那么子类方法表中指向的是子类的方法对象。
    如果,子类没有重写父类的方法,那么子类方法表中指向的是父类的方法对象。

jvm是怎么识别方法的

jvm识别方法的关键在于「类名+方法名+方法描述」。备注:方法描述是参数类型和返回值类型。

怎么调用方法

  • 静态绑定的方法是如何被找到的?
    • 先找到类
    • 然后,找到类中方法的指针,再去调用方法对象
  • 动态方法是如何被找到的?
    • 根据调用者的动态类型(栈的局部变量表中)
    • 根据动态类型,找到方法区中的方法表
    • 在方法表中,找到具体的指针,再去找到方法对象
发布了78 篇原创文章 · 获赞 29 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/lvhonglei1987/article/details/104020789