初始化
- 加载
.class
文件:根据包语法决定的路径找到.class
文件并加载 - 为
static
属性分配储存空间并全部设置默认值 - 装载父类:如果这个类有父类,且父类还没有被装在过,则先装载它父类
- 进行类初始化:按照类定义中的顺序,从上到下初始化
static
属性和执行static
块中的语句- 如果用复制运算符显式赋值,就执行赋值操作
- 如果等号右边的值所属的类尚未被装载,则先装载等号右边的类再赋值(类似递归)
- 可以证明,这个过程中一定会导致这个属性(等号左边)的类被装载
- 如果没有用赋值运算符显式赋值,什么也不干(不去装载这个类)
- 如果
static
块中的语句会使用未装载的类,则先装载这个类,再执行这条语句 static
块的执行和static
属性的初始化是同一个过程,执行的先后顺序只取决于他们在类定义中的顺序- 父类的初始化在父类的装载过程中完成
- 如果用复制运算符显式赋值,就执行赋值操作
对象构造的工作清单
- 如果要构造的对象所属的类尚未被装载,先装载类
- 为非
static
属性分配储存空间并全部设默认值 - 调用父类构造器
- 如果显式通过
super
初始化父类,那么super
必须是构造器中的第一行代码 - 根据类装载的顺序,此时父类一定被装载过了
- 如果显式通过
- 初始化实例属性:按照类定义中的顺序,从上到下初始化非
static
属性 - 执行构造器中除
super
外的代码