« 上一篇下一篇 »

静态数据初始化

对类而言,初始化顺序是由变量在类的定义里面的顺序所决定的。变量的定义可能会分散在类定义的各个地方,并且与方法的定义相互交错,但是变量的初始化会先于任何方法,甚至是构造函数的调用。我们对象的定义分散到各个地方,你可以从程序的输出中看到,变量的reference被初始化了两次:一次是在构造函数调用之前。(这前一个对象被扔掉了,因此会被当作垃圾回收。)这种做法的效率好像不怎么样,但是却能保证进行适当的初始化,如果你还重载了一个不对变量进行初始化的构造函数,而定义变量的时候又没有提供缺省的初始化值,那又会怎样呢?

对static数据来说,故事是相同的:如果它是一个primitive,而你又没有初始化,那么它会得到一个标准的primitive的初始化值。如果它是一个对象的reference,那么除非你创建一个新的对象并把reference连到那个对象,否则它就是null。如果是在定义的时候初始化,那就和非static数据没什么两样了。无论创建多少对象,static数据只能有一份。如果先前没有创建过这种对象,因而其static的成员尚未初始化的话,初始化会先处理其static成员,再处理非static对象。

« 上一篇下一篇 »