一、前言
初始化块的加载顺序一直没有搞清楚,今天做一个小测试。
二、代码
class a{
{
System.out.println("1");
}
static {
System.out.println("2");
}
public void a(){
System.out.println("This is a");
}
}
public class b extends a{
{
System.out.println("3");
}
static{
System.out.println("4");
}
public void b(){
System.out.println("This is b");
}
public static void main(String[] args) {
System.out.println("----main start----");
new a();
new b();
System.out.println("----main end----");
}
}
输出结果:
2
4
----main start----
1
1
3
----main end----
三、结论
加载顺序为:静态方法->父类初始化块->子类调用父类初始化块->子类初始化块
静态代码块会在加载类的时候就加载初始化,初始化块会在创建对象时才加载。