Java开发之道
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

细节20 生死相依——对象的引用与销毁

对象创建后,系统就在堆内存中为其成员分配了内存空间,同时将对象的引用存储在栈内存中,并由对象的引用来操作对象的成员,当对象的引用被销毁后,由JVM的垃圾回收器回收对象所占用的内存空间。也就是说,创建对象的同时也创建了对象的引用,并由该引用来操作对象的成员,而对象的引用销毁后,将释放对象所占用的内存空间。

示例:

    public class Student{
      private String name;
      // 这里省略了name的setter和getter方法
    }

上面的代码创建了一个学生类,该类只有一个成员name,并省略了成员变量name 的setter方法和getter方法。

接下来通过Student类创建一个对象,并以此来说明什么是对象,以及什么是对象的引用:

    Student stud = new Student (); // 定义Student类的引用stud,并将Student类的对象赋值给该引用

说明

上面的代码首先定义Student类的引用stud,然后通过赋值运算符“=”将new Student ()创建的对象赋值给引用stud,这样,stud将指向Student类创建的对象,因此就可以通过引用stud来操作对象的成员了,该对象的内存分布如图5.16所示。

图5.16 Student类的对象及其引用的内存分布

当不再需要对象时,可以将对象的引用stud赋值为null,即stud = null,这样,Student类的该对象失去了引用stud,也就变成一个没用的对象了,这时,JVM 的垃圾回收器将对其进行回收,从而释放了该对象所占用的内存空间。