class Demo_Car{
public static void main(String[] args){
Car c1 = new Car();
c1.color = "red";
c1.num = 8;
c1.run();
Car c2 = new Car();
c2.color = "black";
c2.num = 4;
c2.run();
c2 = null;
c2.run(); //此处会报空指针异常,因为c2此时记录的是null
}
}
class Car{
String color;
int num;
public void run(){
System.out.println(color+"..."+num);
}
}
相关过程与《java一个对象的内存图》一样,
不同的是:(1)c2在创建时,不需要再在方法区中放入Car.class了,因为之前c1的时候已经有了,同时c2也在堆中创建一个对象。
(2)在执行c2 = null这个命令后,c2原先创建的堆中对象的地址就不再记录了,在堆中的被c2创建的对象由于没有任何引用指向它,就成为了垃圾,java中有完善的 java的垃圾回收机制,会在不定时对其进行回收