虽然之前一直吐槽《Head First Java》这本书,但是今天看到第九章(构造器和垃圾收集器)时确实学习了一些新的东西,刷新了对Java的认识。
对象的诞生
Java中对象的创建过程需要调用类的构造函数:
- 若用户没有自定义构造函数,则编译器会默认添加一个无参构造函数。否则,如果用户有自定义构造函数,则编译器不会再添加默认的无参构造函数;
- 子类构造函数的起始部分都会默认调用父类的无参构造函数(这同时也会创建一个父类的对象)。当然,用户也可以显示调用super方法去调用父类的各个构造函数(super调用只能出现在构造函数的第一行);
- 某个构造函数也可以通过this方法调用其他的重载的构造函数(this调用同样只能出现在构造函数的第一行);
对象的生存状态
|
|
之前一直认为如果父类的某个成员变量设置为private之后,则子类与这个成员变量就没有任何关系了,子类中不会有这个成员变量。现在才彻底明白private这种访问权限修饰符仅仅是一种访问权限限制,并不能决定本质上的“有没有”。
下面是一个Hippo对象在堆上的状态:
正如上面所说:我们在调用构造函数创建一个Hippo对象时,其实是先调用其父类的构造函数创建了一个Animal对象的(当然在这之前还创建了所有类的父类Object对象)。所以一个Hippo实例对象是拥有其父类所有属性的,只是有没有权限直接访问而已。
对象的死亡
对象的死亡,即对象所占用的内存被垃圾回收器(GC)回收。一个对象会被垃圾回收器当做垃圾回收的前提条件:没有任何引用变量是指向这个对象的。