前期绑定和后期绑定的区别

柔情只为你懂 2022-05-16 01:25 290阅读 0赞
  1. java多态调用中,对于需要传入一个类的方法,我们可以传入该类的子类,从而调用子类的重写后的方法。之所以编译器可以确定调用哪个对象的方法,主要跟前期绑定和后期绑定有关。

绑定

  1. 将一个方法调用同一个方法主题关联起来称作绑定

前期绑定

  1. 程序执行前进行绑定(也就是说在编译过程中就已经知道这个方法到底是哪个类中的方法)。编译程序时,在出现函数调用的时候,会产生一个对具体函数名字的引用,这样在程序运行的时候,执行到函数调用的语句,就会发现这里一个对XXX方法的引用,就会把执行逻辑解析到这个XXX方法的绝对地址上,例如finalfinal会关闭后期绑定),staticprivate,构造方法,成员变量(包括静态及非静态)都是属于前期绑定,C方法调用都是前期绑定

后期绑定(动态绑定或运行时绑定)

  1. 程序在运行前虚拟机并不知道类的类型,运行时根据对象的类型进行绑定。后期绑定主要通过对象中安置某种“配置信息”,然后利用这一段信息,虚拟机可以计算出该对象的方法地址,然后去调用,实现了类型的识别和方法的调用。

动态绑定的过程:

  1. 虚拟机提取对象的实际类型的方法表;
  2. 虚拟机搜索方法签名;
  3. 调用方法。

    1. 除了前期绑定的,其他都是后期绑定。

参考文章:

  1. 前期绑定 和 后期绑定
  2. Java前期(静态)绑定和后期(动态)绑定
  3. Java编程思想

发表评论

表情:
评论列表 (有 0 条评论,290人围观)

还没有评论,来说两句吧...

相关阅读

    相关 动态静态详解

    动态绑定和静态绑定详解 弄清调用对象方法的执行过程十分重要.下面是调用过程的详细描述: 1.编译器查看对象的声明类型(注意和实际类型区分)和方法名。假设调用x.f(pa

    相关 C++动态静态

    为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误。 需要理解四个名词: 1、对象的静态类型:对象在

    相关 动态静态

    为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误,需要理解四个名词: 1、对象的静态类型:对象在声明时采