默认构造器
默认构造器(又名无参构造器)是没有形式参数的,它的作用是创建一个“默认对象”。如果你写的类中没有构造器,则编译器会自动帮你创建一个默认构造器。
如果已经定义了一个构造器,编译器就不会帮你自动创建默认构造器。
在构造器中调用构造器
可能为一个类写了多个构造器,有时可能想在一个构造器中调用另一个构造器,以避免重复代码。可用this
关键字做到这一点。
尽管可以用this
调用一个构造器,但却不能调用两个。此外,必须将构造器调用置于最起始处,否则编译会报错。
垃圾回收
1 |
|
垃圾回收器会特别对待覆盖了finalize()
方法的对象。一般情况下,在垃圾回收期间,一个无法触及的对象会立即被销毁。不过,覆盖了finalize()
方法的对象会被移动到一个队列(F-Queue)里,一个独立的线程遍历这个队列,调用每一个对象的finalize()
方法。在finalize()
方法调用结束之后,这些对象才成为真正的垃圾,等待下一轮垃圾回收。
一个对象的finalize()
方法只会被调用一次,而且finalize()
被调用不意味着gc会立即回收该对象,所以有可能调用finalize()
后,该对象又不需要被回收了,然后到了真正要被回收的时候,因为前面调用过一次,所以不会调用finalize()
,产生问题。
不该将finalize()
作为通用的清理方法,finalize()
是一个用于释放非Java资源的方法。
之所以要有finalize()
,是由于在分配内存时可能采用了类似C语言中的做法,而非Java中的通常做法。这种情况主要发生在使用“本地方法”的情况下,本地方法是一种在Java中调用非本地代码的方式。
初始化
初始化的顺序是先静态对象(如果它们尚未因前面的对象创建过程而被初始化),而后是“非静态”对象。静态初始化动作只进行一次。