对象的创建和使用:内存解析
总结一下上面这一段话便于记忆:
1 Person p1 = new Person(); 2 p1.name = "Tom"; 3 p1.isMale = true; 4 Person p2 = new Person(); 5 sysout(p2.name);//null 6 Person p3 = p1; 7 p3.age = 10;
第一行,new 一个Perso类的对象,由p1指向。该对象在堆中开辟存储空间,String、int、Boolean类型的三个变量赋默认初始值。
第2,3行修改p1的name和isMale属性。
第4行new一个Person类的对象,由p2指向。
第6行定义p3,将p1赋值给p1,p1和p3指向同一个对象实例,第7 行修改p3的age属性,p1.age也会改变。
2022-05-14
后几页PPT的几个例子大同小异,等到后面的新例子再进行内存分析...
1 Student[] stus = new Student[5]; 2 stus[0] = new Student(); 3 sysout(stus[0].state);//1 4 sysout(stus[1]);//null 5 sysout(stus[1].number);//异常 6 stus[1] = new Student(); 7 sysout(stus[1].number);//0
class Student{
int number;//学号
int state = 1;//年级
int score;//成绩
}
第1行,new一个长度为5的数组。数组类型为Student类的对象。该数组存储在堆空间,数组引用stus存放在栈空间。
第2行,new 一个Student类的对象,该对象在堆空间开辟存储空间,该对象的引用存储在stus[0]位置。
第5行出现空指针异常,因为在第1行new数组时给sstus[0]~[4]位置都服了初始值null,stus[1].number即null.number,所以出现了空指针异常。
由上个例子总结一句话:堆存储new出来的东西。
2022-05-15