以以下代码为列:
public class NeiChun {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student s = new Student();
// null -- 0
System.out.println(s.name+"---"+s.age);
s.name = "小明";
s.age = 18;
// 小明---18
System.out.println(s.name+"---"+s.age);
Student s2=s;
// 小明--18
System.out.println(s2.name+"---"+s2.age);
s2.name = "张三";
s2.age = 20;
// 张三--20
System.out.println(s2.name+"---"+s2.age);
// 张三--20
System.out.println(s.name+"---"+s.age);
}
}
class Student{
String name;
int age;
void eat(){
System.out.println("吃饭!");
}
void play(){
System.out.println("玩耍!");
}
}
1、首先NeiChun.class要加载到方法区;
2、主方法进栈;
3、Student.class加载到方法区;
4、主方法中创建变量 s ,该变量是Student类类型;
5、在堆里面创建对象new Student(),该对象与方法区中的Student.class字节码文件对象关联;
6、然后堆中的生成地址 0x001 赋值给 s;
7、s通过地址找到堆内生成的对象;