Java中,静态初始化块、初始化块、构造函数三者都用来完成类的初始化工作,在实际编程中可以根据不同的需要使用不同的初始化方式,以下为三者的代码格式及Java虚拟机对三者的执行顺序分析。
先看一程序:
package org.zeroup;
class Blocks {
static {
System.out.println("父类静态初始化块");
}
{
System.out.println("父类初始化块");
}
Blocks() {
System.out.println("父类构造函数");
}
}
public class InitailizeBlocks extends Blocks {
static {
System.out.println("子类静态初始化块");
}
{
System.out.println("子类初始化块");
}
public InitailizeBlocks() {
System.out.println("子类构造函数");
}
public static void main(String[] args) {
new InitailizeBlocks();
}
}
输出结果:
1
2
3
4
5
6
|
父类静态初始化块
子类静态初始化块
父类初始化块
父类构造函数
子类初始化块
子类构造函数
|
分析:
静态代码块在类加载时被执行,而非静态代码(包括初始化代码块和构造函数)在生成对象时才被执行,故父类和子类的静态初始化代码块最早执行;初始化块与构造函数的执行顺序,前者要早于后者。