【问题标题】:Why early binding is resolved at compile time if the actual object is determined at runtime?如果实际对象是在运行时确定的,为什么在编译时解决早期绑定?
【发布时间】:2012-05-22 16:24:51
【问题描述】:

我知道所有对象都是在调用函数时在运行时创建的。

绑定是我们在类中绑定方法数据成员。

早期绑定是在编译时绑定所有方法实例变量。我认为所有对象都是在运行时创建的,所以它必须在运行时绑定所有方法数据成员。

为什么在早期绑定中对对象方法的调用是在编译时确定的?如果该对象是在运行时创建的。

例如。

class A{
    public void foo(){
        //some code here
    }
}

public static void main(String[] args){
    A aInstance = new A();
    aInstance.foo();
}

foo() 是在编译时解析的,但 aInstance 是在运行时确定的。

【问题讨论】:

  • 使用该代码的实例怎么可能是 class A 以外的任何东西?
  • 这是一个带有错误标签的 Java 问题。重新标记。

标签: java object late-binding early-binding


【解决方案1】:

这是因为绑定调用意味着确定要调用的方法(或函数),而不是确定调用它的实例。

最好提前绑定,因为这样调用的执行速度会稍微快一些。

延迟绑定到运行时的唯一原因可能是多态性,甚至对象的确切类型在编译类型时也是未知的;或者一个不关心 VMT 查找成本的简单编译器实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 2015-12-02
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 2015-04-08
    相关资源
    最近更新 更多