所有类的变量不论是在类的什么位置,他的初始化都会在任何函数执行前包括构造函数完成,如果没有被初始化赋值,会得到默认值,如果在构造函数中再次被赋值,他将变更原来的初值。
所以一个程序中最先执行的是他的类成员变量的初始化。所以要注意这个问题。static成员变量也会给与默认初始值,但不同的是:通常每生成一个类的对象,他的类范围变量都要初始化一次,但static变量只在第一个对象产生的时候初始化,以后同样类的对象在产生,他不会被初始化。即使非static变量在Static 变量前声明,Static 优先级高,会被先初始化。
Thinking in Java 的160页下方的Dog事例阅读。
1.找到classpath所指定的路径,装载class文件
2.所有static成员初始化动作都会被执行,此操作只会发生一次,首次对象被封装的时候。
3.当new Class,在heap上分配空间。
4.执行初始化动作。
5.执行构造函数。
6.需要注意的是如果有继承关系的话,先初始化超类的变量和构造函数,然后是子类的。