JAVA-初步认识-第六章-引用数据类型参数传递图解
一.
(本题的修饰事物类和创建对象类是集中在一起的)
本题涉及到对象,而且是Demo类在里面创造的Demo对象,本类对象?
本题虽然开头就有int x=3,这样的定义在类中的成员变量,但jvm还是先从主函数进入程序。
先往栈内存中加载主函数main和局部变量d. (从mian主函数作为入口进入后,先执行Demo d=new Demo(), 接着int x=3.) 接着在堆内存中开辟一个Demo类类型空间。这里创建的对象和类名相同,自然也会引入属性,即成员变量x。这里是四步走,开辟空间,分配地址,默认初始化,变量赋值。还有一点需要注意的是,Demo d = new Demo()这一句话,是先后三步来的,先是运行左边Demo d,接着是右边new Demo(), 最后将两者联系起来。
接着执行d.x=9,d找到自己对应的x,赋值为9,
接着是show(d); show要进栈,函数都是在栈里面,同时在里面带了创建了自己的变量d。在这里show是功能化函数,还要联系public static void show(Demo d).方法这句话怎么理解呢?show(Demo d)意味着对输入的类类型变量d进行处理,而类类型变量d,之前已经一定,并赋值结束了。这里是对我们最初学习方法时的一些看法,进行了深入。之前的基本数据类型的变量在调用函数时,并没有仔细研究过它的调用过程是怎样的,而且认为定义方法时的输入形参和主函数中的形参名可以不一致,但是在这里看,貌似不行。接着说主函数中的show(d)语句。首先无论是主函数还是功能化函数,都是在栈中开辟空间,show(d)同样是先在栈中开辟了名为show的空间,同时创建了一个局部变量d,功能化函数在定义时,是对输入Demo类类型d变量进行处理,也就是将主函数中已经定义好的d赋值给我们在show中刚创建的d(这就相当于又建立了一个指向,多变量同时指向一个对象实体),然后按照功能化函数中的执行语句,对d进行处理,执行语句就是对实体进行d.x=4的运算。对堆中的Demo类进行x=4的修改,是通过栈中show这条指向线来进行的。紧接着执行return,操作的是弹栈,将show函数出栈。我觉着这里讲述的一切都是底层的东西。(以我之前的理解来看,这里应该是将已经定义好的d送入show中,然后按照show中的执行语句对输入的d进行处理,最后经过return返回值,也有可能不返回。)
(在面向对象这一章中,始终讨论的都是技术,讲述的都是怎么做,没有一个思想的升华。)
最后一句输出语句,输出的是主函数中的d及其调用的x。