一:如果是单独一个类:
public class Test1 {
private static String st = setSt(); // 1.走这里初始化静态成员
private String s = "我是成员"; // 4.非静态成员初始化,初始化之后赋值
static{ // 3.静态代码块
System.out.println("我是静态代码块");
}
public Test1(){ // 5.构造器
System.out.println("我是构造器");
System.out.println(st);
System.out.println(s);
}
public static String setSt(){ // 2.给静态成员赋值
System.out.println("我刚经过初始化:"+st);
return "我是静态成员";
}
public static void main(String[] args) {
new Test1();
}
}
输出的结果是:
我刚经过初始化:null
我是静态代码块
我是构造器
我是静态成员
我是成员
从上面可以看出一个类的加载顺序:
1.先初始化静态成员。
2.给静态成员赋值。
3.静态代码块
4.非静态成员初始化,然后赋值
5.非静态代码块
6.构造器
二:如果是子类继承父类
new 子类()时的顺序
1.初始化 父类静态代码,按顺序初始化静态属性(静态成员)和静态代码块(如果 静态属性 在 静态代码块 后面,则先初始化 静态代码块)
2.初始化 子类静态代码,
3.初始化 父类的非静态代码
4.初始化 父类构造函数
5.初始化 子类非静态代码
6.初始化 子类构造函数