专栏首页码的一手好代码Java中的静态绑定与动态绑定

Java中的静态绑定与动态绑定

程序绑定的概念

绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来。对java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定.

  • 静态绑定:在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现。例如:C。 也就是说在编译过程中就已经知道这个方法到底是哪个类中的方法; 针对java简单的可以理解为程序编译期的绑定;这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定(静态绑定)
  • 动态绑定:在运行时根据具体对象的类型进行绑定。 若一种语言实现了后期绑定,同时必须提供一些机制,可在运行期间判断对象的类型,并分别调用适当的方法。也就是说,编译器此时依然不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体。不同的语言对后期绑定的实现方法是有所区别的。但我们至少可以这样认为:它们都要在对象中安插某些特殊类型的信息。 Java中动态绑定的过程:
    • 虚拟机提取对象的实际类型的方法表;
    • 虚拟机搜索方法签名;
    • 调用方法。

关于final,static,private和构造方法是静态绑定的理解

  • private:对于private的方法,首先一点它不能被继承,既然不能被继承那么就没办法通过它子类的对象来调用,而只能通过这个类自身的对象来调用。因此就可以说private方法和定义这个方法的类绑定在了一起。
  • final:方法虽然可以被继承,但不能被重写(覆盖),虽然子类对象可以调用,但是调用的都是父类中所定义的那个final方法,(由此我们可以知道将方法声明为final类型,一是为了防止方法被覆盖,二是为了有效地关闭java中的动态绑定)。
  • static:具体的原理我也说不太清。不过根据网上的资料和我自己做的实验可以得出结论:static方法可以被子类继承,但是不能被子类重写(覆盖),但是可以被子类隐藏。(这里意思是说如果父类里有一个static方法,它的子类里如果没有对应的方法,那么当子类对象调用这个方法时就会使用父类中的方法。而如果子类中定义了相同的方法,则会调用子类的中定义的方法。唯一的不同就是,当子类对象上转型为父类对象时,不论子类中有没有定义这个静态方法,该对象都会使用父类中的静态方法。因此这里说静态方法可以被隐藏而不能被覆盖。这与子类隐藏父类中的成员变量是一样的。隐藏和覆盖的区别在于,子类对象转换成父类对象后,能够访问父类被隐藏的变量和方法,而不能访问父类被覆盖的方法)

由上面我们可以得出结论,如果一个方法不可被继承或者继承后不可被覆盖,那么这个方法就采用的静态绑定。

参考

Java静态绑定与动态绑定

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Yarn 详解

    Container是Yarn框架的计算单元,是具体执行应用task(如map task、reduce task)的基本单位。Container和集群节点的关系是...

    俺也想起舞
  • Spark入门

    Transformation:进行数据的转换,即将一个RDD转换成另一个RDD,这类转换并不触发提交作业,完成作业中间过程处理。

    俺也想起舞
  • 深入理解JVM虚拟机---JVM内存管理

    ​ 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念...

    俺也想起舞
  • 理解静态绑定与动态绑定

    一个Java 程序要经过编写、编译、运行三个步骤,其中编写代码不在我们讨论的范围之内,那么我们的重点自然就放在了编译 和 运行这两个阶段,由于编译和运行阶段过程...

    cxuan
  • 直接修改托管堆栈中的type object pointer(类型对象指针)

    最初的我简单认为数据的类型就是定义时字段的类型修饰决定的(回来发现这种观点是绝对错误的)

    lulianqi
  • WCF的Binding模型之五:绑定元素(Binding Element)

    在上面的内容中,先后介绍了信道、信道管理器、信道监听器和信道工厂。从对象的创建来讲,信道管理器是信道的创建者。说的再具体点,客户端的信道通过信道工厂创建,服务端...

    蒋金楠
  • jQuery on绑定事件问题

    以前没注意,最近在使用on绑定事件时发现,通过for循环绑定动态绑定时,多个元素最终绑定的都是最后一次事件,不知道用while是不是也是一样,谁有清楚这种现象也...

    sucl
  • PAT (Basic Level) Practice (中文)1002 写出这个数

    每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10​100。

    C you again 的博客
  • 浅谈.Net反射 5

    反射是动态操作元数据的能力,从程序集-模块-类型-字段-属性-方法-参数等,反射可以动态操作这些部分,在编译时不确定,在运行中动态确定,并进行有效控制。

    小蜜蜂
  • 关于增强51cto博客评论系统功能的建议

    使用51有一段时间了,感觉博客评论系统使用起来比较简单,而且发现一个现象,就是往往一篇优秀的博文,浏览的人很多,作评论的人很少,关于博客评论系统提几个小建议:

    力哥聊运维与云计算

扫码关注云+社区

领取腾讯云代金券