1.多个对象
1. 首先,main()方法被加载到栈内存。(图1)
2.创建第一个对象。在mian方法中出现 s1;new Student() 就会在堆内存中出现,name 和 age 对应的默认值分别为 null 和 0;它的地址值是001,赋值给 s1,s1 通过 001 就指向堆内存这块地址。(图2)
3. s1.name = "林青霞";
这里修改了 s1 对应的name值为:林青霞
同理, s1.age = 30; 把age 对应的值修改为30 (图 3)
4. 第一次输出的时候。
s1 通过 栈内存的 001 指向 堆内存的 001.
name 和 age 的值分别是:林青霞 和 30
做一个拼接,在控制台输出 (图 4)
5. 调用方法 s1.Study();
Study方法 加载到栈内存中,方法调用者:s1(地址值是 001);方法开始执行,在控制台输出:好好学习;接着往下,方法执行结束,从栈内存中消失 (图 5)
同理,s1 调 doHomework 方法也是如此
6. 创建第二个对象并使用
Student s2 = new Student(); 首先在main 方法里 会出现一个 Student s2 ;new Student() 在堆内存中出现,name 和 age 对应的默认值分别为 null 和 0;地址值 002 ,把002 赋值给了 s2,通过002 指向堆内存的这块 内存空间 (图 6)
(s1、s2 对应的地址值是不相同的,两个对象分别对应 堆内存里 001、002 地址内容) (图 7)
7. s2.name = "张曼玉";
s2 通过 002指向了堆内存的 002,修改 name值为 张曼玉 (图 8)
同理,age 值 修改为 28 (图 9)
8. 第二次输出
s2 通过 栈内存的 002 指向 堆内存的 002
name 和 age 的值分别是:张曼玉 和 28
做一个拼接,在控制台输出 (图 10)
9. s2.study();
还是这个类 它的study方法加载到栈内存,这次,调用者 s2 (002)方法开始执行,在控制台输出:好好学习;接着往下,方法执行结束,从栈内存中消失 (图 11)
同理,s2 调 doHomework 方法也是如此
10. 再往下,main方法执行结束 ,从栈内存消失
s1 和 s2 它们成员变量 值不同,但是它们调用成员方法在控制台输出是一样的,方法多个对象是可以共用的,而每个成员变量的值是由有不同的。