学了这么久java其实我对object的reference一直好像是似懂非懂的.只是觉得reference应该是指的一个内存地址,跟C的指针差不多,用来控制object的,不过要受编译器的限制也不能进行指针运算,也算是一个安全的指针吧.但让我模糊的是 reference前面的类型究竟有什么作用.比如我定义一个类叫p,那么 p a=new p(); 类型究竟有什么作用,在内存(也就是堆栈中)中是怎么分配.因为用new p()可以在堆中建立一个对象的实例,a 是在statc中生成一个指向new p(),但a 交朋友的对象真的没起多大作用.请大家指点一下..
他是存在statc中的,这好像能说明一些.
那么说明为a分配了一个内存地址,内存地址是4bit的内存空间,并且内存空间存的数据是3;
(也不知道我说得对不对,以前真还仔细考虑这个问题,请大家多多发言,把这个问题探讨清楚.)p a=new p();到底是怎么操作的.a中肯定也是存的内存地址,但是什么,是和p 有关系还是p()有关系.最好结合多态中的upcasting来说明一下.
http://community.csdn.net/Expert/topic/3993/3993622.xml?temp=.2393@.@||~
告诉a,它所指的就是类p的对象new p()的地址。应该是这样的,I think.
对象在内存中分配的形式是:成员变量(就是Field),是顺序存放的。而里面的方法不放在对象中,而是放在一个存放函数的地方,里面只是有这个函数的地址而已。至于虚方法,则有一个虚方法表。指向这个虚方法表的指针放在对象的最开始位置。
用P,是因为,每个对象都不一样,里面的成员也不一样,用P就是认编译器知道那块内存多大范围是这个对象的,里面有什么方法。
这就是为什么据有的对象都能用Object引用,但是子类引用父类就会出现错误。
唉。有点说乱了。
就好像这样. bird a=new glede();
这定义一个鸟的类型,但是可以存一个老鹰的实例.一样可以调用base class的各个函数.不知道我的理解对不对?
java编程思想 第一章 对象