今天主要学习了对象内存管理:
1.构造方法
this:指代当前对象,谁调指的是谁
用法: this.成员变量
this.方法
this([参数])---调用本类构造方法
2.堆、栈、方法区:
堆:new出来的对象,以及成员变量
栈:局部变量
方法调用时开辟一个栈桢(包含参数、局部变量)
方法调用结束时,栈桢被清除(参数、局部变量也被清除)
方法区:类的相关信息以及方法
垃圾回收器:JVM中的一个小线程,清理垃圾
回收过程是透明的
垃圾:没有引用所指向的对象
建议:当一个对象不再使用时,将其引用设置为null
3.引用类型数组
import java.util.Arrays;
public class Test01 {
public static void main(String[] args) {
Pet[] p1=new Pet[]{
new Pet("贝贝"), new Pet("旺财"), new Pet("啸天"),
};
Pet[] p2=new Pet[3];
System.arraycopy(p1, 1, p2, 1, 2);
p1[1].name="北极";
System.out.println(Arrays.toString(p2));
//输出结果为:[null, 北极, 啸天]
}
}
class Pet{
String name;
public Pet(String name){
this.name=name;
}
public String toString(){
return name;
}
}
为什么当p1[1].name再次赋值后,p2[1].name会跟着改变呢?
从图中可以看出,p1[1]和p2[1]指向同一个对象,道理就明白了