先上代码:
public class Student {
int no; //1.学号
String name;//2.姓名
int age; //3.年龄
boolean sex;//4.性别
String addr;//5.地址
}
public class OOTest01 {
public static void main(String[] args) {
int i = 10;//1.创建局部变量i,并且给i赋初值10.
System.out.println("----------1----------");
Student s = new Student();//2.new Student()创建了一个Student类型的对象,然后声明对象引用类型变量s,然后将
//对象的引用赋给变量s.
System.out.println(s.no); //3.输出s学号
System.out.println(s.name);//4.输出s姓名
System.out.println(s.age);//5.输出s年龄
System.out.println(s.sex);//6.输出s性别
System.out.println(s.addr);//7.输出s地址
System.out.println("----------2----------");
Student s2 = new Student();
s2.no = 10;
s2.name = "jack";
s2.age = 20;
s2.addr = "北京";
s2.sex = true;
System.out.println(s2.no);
System.out.println(s2.name);
System.out.println(s2.age);
System.out.println(s2.sex);
System.out.println(s2.addr);
System.out.println("----------3----------");
Student s1 = s;
System.out.println(s1.no);
System.out.println(s1.name);
System.out.println(s1.age);
System.out.println(s1.sex);
System.out.println(s1.addr);
}
}
输出结果:
图一
当程序开始执行时,main被调入栈内存,类加载器将 .class 文件搬到方法内存上
当程序执行int i = 10;
时,对应的图一所示的1,栈中有一个名为i的变量,它的值为10.
当程序执行Student s = new Student();
时,先看等号的右边,新创建一个对象,如上图的图二,因为Student类中的no,name,age,sex,addr,为成员变量,所以Student对象会有初始值。接着看等号的左边,创建一个引用类型s。最后将Student的引用赋给s,也就是将地址值赋给s,如上图的3.
当程序执行第二段时,通过 . 的方式访问对象的数据,并且进行了修改,如上图所示。此时输出对象的数据将变为原来的。
当程序执行第三段时,新创建了对象,如上图的4,此时两个对象是独立存在的,互不干扰。
说明:从上面的学习当中,我们不难看出实例变量不能通过 className. 的方式去访问。