美文网首页
Java中的绑定

Java中的绑定

作者: GalileoGalilei | 来源:发表于2018-03-19 10:18 被阅读0次

静态类型和动态类型


任何一个引用变量都有两个类型:一个叫静态类型,也就是定义该引用变量的类型;另一个叫动态类型,也就是该引用实际指向的对象类型。

A a = new B();
那么,引用a的静态类型就是A,动态类型就是B。

编译看左边,运行看右边。
java中引用的静态类型再编译的时候就可以确认,但是编译器无法得知这个引用的动态类型;只有程序运行时,通过RTTI(run time type identification, 运行时类型检查)就可检查出引用的动态类型。

  • 绑定

对于一个程序,可以有很多的方法。这些方法的名称、参数类型和参数数量都可能相同或者不同,那么再调用一个方法的时候,如何将一个方法和该方法所在的类关联起来,这就是绑定。java中的绑定分为动态绑定和静态绑定。

  • 静态绑定

所有依赖于静态类型来将方法和该方法所在的类关联起来的动作就是静态绑定。因为静态绑定发生在编译时期,所以又叫前期绑定。

  • 动态绑定

所有依赖动态类型来将方法和方法所在的类进行关联的动作就是动态绑定。以为动态绑定实在程序运行时,通过RTTI实现,所以又叫后期绑定。

  • 举个栗子

有父类Father和子类Son,子类重写了父类中的某个方法method()。

Father father = new Son();
father.method();

在这个栗子中,静态绑定的过程是:java文件编译时,编译器检查出引用father的静态类型时Father类,于是将method()方法和父类Father关联起来。也就是说,程序运行前编译器是无法检查出引用father的动态类型的,所以会直接调用静态类型中的方法。

而动态类型的过程是:当这个java程序运行起来了,RTTI检查出引用father的动态类型是Son类时,会将method()方法和子类Son关联起来,也就是确定调用动态类型Son类中的method方法。具体过程为:1. JVM提取对象的实际类型的方法表;2. JVM搜索方法签名;3. 调用方法。

java中的类的属性都是静态绑定。这是因为静态绑定是有很多的好处,他可以让我们在编译器就发现程序中的错误,而不是在运行期。这样就可以提高程序的运行效率!而对方法采用动态绑定是为了实现多态。

相关文章

  • Java中的绑定

    静态类型和动态类型 任何一个引用变量都有两个类型:一个叫静态类型,也就是定义该引用变量的类型;另一个叫动态类型,也...

  • Java-动态绑定和静态绑定

    绑定 一个方法的调用与方法所在的类关联起来。java中的绑定分为静态绑定和动态绑定,又被称作前期绑定和后期绑定。 ...

  • java中this的软绑定

    首先,什么是软绑定? 所谓软绑定,是和硬绑定相对应的一个词,在详细解释软绑定之前,我们先来看看硬绑定。 在Java...

  • Java基础每日10题——第二天

    1.Java中实现多态的机制是什么? 动态绑定 2.Java中异常分为哪些种类 RuntimeException、...

  • Java中的静态绑定和动态绑定

    问题 先来看stack overflow上的一个问题: 当我们执行CovariantTest中的main()方法时...

  • 【Hibernate】session.createQuery的参

    参数绑定: 都支持位置绑定和命名绑定如: Java代码 **基本的参数绑定: **setString();setI...

  • java多态中的成员绑定

    多态是面向对象的三大特征之一谈到多态,不得不提的就是,多态中的成员绑定问题. 方法绑定 将一个方法调用同一个方法主...

  • 如何在C++中嵌入JAVA

    如何在C++中嵌入JAVA 最近在为 AWTK 增加 JAVA 绑定,在 Windows 和 Linux 下工作正...

  • 多态

    1.方法调用绑定 将方法调用与方法主体关联起来称为“绑定”。 java中除了static和final之外,其他方法...

  • 2018-05-11

    一、静态绑定和动态绑定的区别 在Java中,当你调用一个方法时,可能会在编译时期(compile time)解析(...

网友评论

      本文标题:Java中的绑定

      本文链接:https://www.haomeiwen.com/subject/zzjlqftx.html