初始化
Java尽力保证:所有变量在使用前都能得到恰当的初始化。对于方法的局部变量,Java以编译时错误的形式来贯彻这种保证。
基本类型默认初值都为0,char也为0,但是'\u0000'为空格控制打印为空。
Java类的初始化顺序:
https://www.cnblogs.com/fly-piglet/p/8766226.html
清理
C++中,对象一定会被销毁(如果程序中没有缺陷的话),java里的对象并非总是被垃圾回收。
- 对象可能不被垃圾回收。
- 垃圾回收并不等于析构。
finalize():与C++的析构函数不同java不保证执行时间跟是否必定执行。此方法用于一种特殊情况,即分配内存时可能采用了类似C语言中的做法,而非Java中的通常做法。这种情况主要发生在使用“本地方法”的情况下,例如使用了C的malloc()函数来分配内存,就需要在finalize()中调用C的free()函数来释放内存。否则,Java垃圾回收是不会是释放C语言分配的内存空间的。
finalize()函数的大概流程:当对象变成(GC Roots)不可达时,GC会判断该对象是否覆盖了finalize方法,若未覆盖,则直接将其回收。否则,若对象未执行过finalize方法,将其放入F-Queue队列,由一低优先级线程执行该队列中对象的finalize方法。执行finalize方法完毕后,GC会再次判断该对象是否可达,若不可达,则进行回收,否则,对象“复活”。finalize()只会执行一次。