java类初始化顺序
一、概述
了解类的初始化顺序,可以更灵活、方便的构造一个类。
二、类初始化顺序
2.1 示例
public class InitialOrderTest {
    public static void main(String[] args) {
        new InitialOrderTest();
    }
    // 变量
    public FieldClass field = new FieldClass("变量");
    // 初始化块
    {
        System.out.println("初始化块");
    }
    // 静态变量
    public static FieldClass staticField = new FieldClass("静态变量");
    // 静态初始化块
    static {
        System.out.println("静态初始化块");
    }
    // 构造器
    public InitialOrderTest() {
        System.out.println("构造器");
    }
}
public class FieldClass {
    public FieldClass(String msg){
        System.out.println(msg);
    }
}
2.2 结论
2.1 示例运印结果:
1.静态变量
2.静态初始化块
3.变量
4.初始化块
5.构造器
三、继承关系初始化顺序
3.1 示例
public class Parent {
    
    public Parent(){
        System.out.println("父类构造器");
    }
    //静态初始块
    static{
        System.out.println("父类静态初始化");
    }
    //静态变量
    public static FieldClass parentStaticField=new FieldClass("父类静态变量");
    //初始化块
    {
        System.out.println("父类初始化块");
    }
    //变量
    public FieldClass parentField=new FieldClass("父类变量");
}
public class Child extends Parent{
    public Child(){
        System.out.println("子类构造器");
    }
    //静态初始块
    static{
        System.out.println("子类静态初始化");
    }
    //静态变量
    public static FieldClass childStaticField=new FieldClass("子类静态变量");
    //初始化块
    {
        System.out.println("子类初始化块");
    }
    //变量
    public FieldClass childField=new FieldClass("子类变量");
    public static void main(String[] args){
        new Child();
    }
}
public class FieldClass {
    public FieldClass(String msg){
        System.out.println(msg);
    }
}
3.2 结论
3.1 示例打印结果:
1. 父类静态初始化
2. 父类静态变量
3. 子类静态初始化
4. 子类静态变量
5. 父类初始化块
6. 父类变量
7. 父类构造器
8. 子类初始化块
9. 子类变量
10. 子类构造器
四、静态变量与静态初始化块、变量与初始化块的顺序
仔细观察以上两个示例,会发现关于静态变量与静态初始化块、变量与初始化块的结果打印顺序是不同的,所以最终的结论:静态变量和静态初始化块、变量和初始化块的初始化顺序取决于在类中定义的顺序。
	  注:文章中难免有不足之处,欢迎评论、互动、指正。
            
         
                
            
         
                    
                     
                    
                 
                    
                 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号