java动态绑定的情况分析
2013-09-08 15:53
176 查看
java是面向对象的语言,java中多态的一种情况是动态绑定。所谓的动态绑定,分两种情况:当调用类方法的时候,java虚拟机会基于对象的引用类型来选择执行方法。当java调用一个实例方法的时候,他会根据对象的实际类型来决定哪个方法来执行。
1、java的对象模型
java虚拟机规范里面并没有规定java对象在堆里面应该怎么去表示。对象的内部表示,也决定了java的内存回收和内存分配的设计,所以这些都是根据虚拟机的不同而不同。
//关于java对象的内存模型!!
java虚拟机规范并没有强制规定需要使用方法表,但是方法表的使用可以大大的加快java程序的执行效率。
2、动态绑定的内部机制
方法表是一个数组,其中的元素是指向方法区的方法指针。方法表中的元素并不含有static描述的静态方法,要不会包含private修饰的私有方法,只是包含了指向需要动态绑定的实例方法的方法指针。一般情况下,方法表里面的顺序是这样的,超类的方法放在子类的方法之前,同一个类里面的方法根据他们在class文件里面的先后顺序排列。当然,也有例外的情况,当子类覆盖了超类的方法,那么指向超类中方法的方法指针会变成子类中的方法指针。也就是说,super.method指针实际指向的是child.method。
所以说,下面这个例子
当Base base = new Child()的时候,new child()产生的方法表中,test是指向了child里面的test方法指针的,当调用base.test()方法的时候,输出应该是
Child-test
1、java的对象模型
java虚拟机规范里面并没有规定java对象在堆里面应该怎么去表示。对象的内部表示,也决定了java的内存回收和内存分配的设计,所以这些都是根据虚拟机的不同而不同。
//关于java对象的内存模型!!
java虚拟机规范并没有强制规定需要使用方法表,但是方法表的使用可以大大的加快java程序的执行效率。
2、动态绑定的内部机制
方法表是一个数组,其中的元素是指向方法区的方法指针。方法表中的元素并不含有static描述的静态方法,要不会包含private修饰的私有方法,只是包含了指向需要动态绑定的实例方法的方法指针。一般情况下,方法表里面的顺序是这样的,超类的方法放在子类的方法之前,同一个类里面的方法根据他们在class文件里面的先后顺序排列。当然,也有例外的情况,当子类覆盖了超类的方法,那么指向超类中方法的方法指针会变成子类中的方法指针。也就是说,super.method指针实际指向的是child.method。
所以说,下面这个例子
package fresh.heli.test; /** * Created with IntelliJ IDEA. * User: justzhl * Date: 13-9-8 * Time: 下午3:37 */ public class Main { public static void main(String[] args) { Base base = new Child(); base.test(); } } class Base { public void test() { System.out.println("Base-test"); } } class Child extends Base { @Override public void test() { System.out.println("Child-test"); } }
当Base base = new Child()的时候,new child()产生的方法表中,test是指向了child里面的test方法指针的,当调用base.test()方法的时候,输出应该是
Child-test
相关文章推荐
- Java动态绑定机制原理分析
- Java 静态绑定与动态绑定深入分析
- HttpUrlConnection底层实现和关于java host绑定ip即时生效的设置及分析
- Java动态绑定机制的内幕
- Java基础1---动态绑定实现机制
- Java 动态代理机制分析及扩展,第 1 部分
- 利用JAVA的动态属性之反射原理实现一个简单AOP容器 - AOP的实现原理分析
- HttpUrlConnection底层实现和关于java host绑定ip即时生效的设置及分析
- IOS性能调优系列:使用Allocation动态分析内存使用情况
- java动态绑定和静态绑定(分步验证)
- 从Java回调机制分析Android动态加载布局过程中出现的IllgalStateException
- java多态的静态绑定和动态绑定的理解
- Java动态绑定机制的底层实现
- java异常情况分析
- JAVA 动态代理(proxy)的实现和源码分析
- Java动态绑定机制详解
- Java基础之动态绑定
- 用MAT分析JAVA程序运行时的内存使用情况
- Java JDK 动态代理(AOP)使用及实现原理分析
- Java中的多态(polymorphism)和动态绑定(dynamic binding)