读书人

Java动态绑定机制的内情

发布时间: 2012-12-21 12:03:49 作者: rapoo

Java动态绑定机制的内幕

???? 在Java方法调用的过程中,JVM是如何知道调用的是哪个类的方法源代码? 这里面到底有什么内幕呢? 这篇文章我们就将揭露JVM方法调用的静态(static binding) 动态绑定机制(auto binding)

?

?

★ 静态绑定机制

????? (4) 这是通过第(2)步中解析完成的#15常量表中的方法表的索引项11,可以定位到Son类型方法表中的方法f1(),然后通过直接地址找到该方法字节码所在的内存空间。

?

????? 很明显,根据对象(father)的声明类型(Father)还不能够确定调用方法f1的位置,必须根据father在堆中实际创建的对象类型Son来确定f1方法所在的位置。这种在程序运行过程中,通过动态创建的对象的方法表来定位方法的方式,我们叫做 动态绑定机制

?

????? 上面的过程很清楚的反映出在方法覆盖的多态调用的情况下,JVM是如何定位到准确的方法的。但是下面的调用方法JVM是如何定位的呢?(仍然使用上面代码中的Father和Son类型)

public class Obscure{ static String System;// Obscures type java.lang.System public static void main(String[] args) // Next line won't compile:System refers to static field System. out. println(“hello, obscure world!”); }}

?

读书人网 >编程

热点推荐