编程语言
首页 > 编程语言> > Java中的Binding和Dispatching有什么区别?

Java中的Binding和Dispatching有什么区别?

作者:互联网

关联名称太多:早期和晚期绑定,静态和动态调度,运行时与编译时多态等等,我不明白其中的区别.

我发现了一个明确的explanation,但它是否正确?我会解释JustinC:

绑定:是确定变量的类型(对象?).如果它在编译时完成,它的早期绑定.如果它是在运行时完成的,那就是后期绑定.

Dispatch:确定哪个方法与方法调用匹配. Static Dispatch是编译时的计算方法,而动态调度是在运行时执行的.

绑定是否将原始值和引用变量分别与原始值和对象进行匹配?

编辑:请给我一些明确的参考资料,以便我可以阅读更多相关信息.

解决方法:

我认为这种混淆通常来自于这些术语的超载程度.

我们用高级语言编写程序,编译器或解释器必须将其转换为机器实际理解的东西.

粗略地说,您可以想象编译器将我们的方法代码转换为某种形式的机器代码.如果编译器在那时知道当我们稍后运行程序时该方法将驻留在内存中的确切位置,那么它可以安全地去找到这个编译方法的每个方法调用并将其替换为跳转到此地址的编译代码居住,对吗?

那么,实现这种关系是我理解为具有约束力的.但是,这种绑定可能发生在不同的时刻,例如在编译时,链接时间,加载时间或运行时,取决于语言的设计.

术语静态和动态通常分别用于指运行时和运行时绑定的事物.

后来的绑定时间与更大的灵活性相关联,较早的绑定时间与更高的效率相关联.语言设计师在创建语言时必须平衡这两个方面.

大多数面向对象的编程语言都支持子类型多态.在这些语言中,虚拟方法在运行时绑定,具体取决于此时对象的动态类型.换句话说,虚拟方法在运行时根据所涉及的对象实现的动态类型分派给适当的实现,而不仅仅基于其静态类型引用.

因此,在我看来,您必须首先将方法调用绑定到特定的实现或执行地址等,然后您可以调度它.

我在过去的一个非常类似的问题中,我通过示例演示了如何在Java中实现这一点.

我还建议你阅读这本书Programming Language Pragmatics.从理论的角度来看,这是一本非常好的参考资料.

标签:java,early-binding,dynamic-dispatch,late-binding,static-dispatch
来源: https://codeday.me/bug/20190519/1133945.html