Java 类的初始化的顺序

来源:互联网 发布:福建师范大学网络教育 编辑:程序博客网 时间:2024/06/06 10:50

《JAVA解惑》的解惑40中提到JAVA中的实例变量的初始化操作优先与构造器的程序体而运行。这一点与C++有天大的区别。

我们大家都知道,对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态
变量、静态初始化块)>(变量、初始化块)>构造器。

继承体系中一般的顺序为:父类的(静态变量、静态初始化块)>子类的(静态变量、静态初始化块)>父类的(变量、初始化块)>父类构造器>子类的(变量、初始化块)>子类构造器。

public class Test1 {    //静态变量public static String staticField = "静态变量";    // 变量public String field = "变量";    // 静态初始化块static {System.out.println(staticField);System.out.println("静态初始化块");}// 初始化块{System.out.println(field);    System.out.println("初始化块");}// 构造器public Test1() {System.out.println("构造器");}    public static void main(String[] args) {    new Test1();      }    }


 

class Parent {    // 静态变量public static String p_StaticField = "父类--静态变量";    //变量public String p_Field = "父类--变量";    // 静态初始化块static {    System.out.println(p_StaticField);    System.out.println("父类--静态初始化块");    }    //{    System.out.println(p_Field);    System.out.println("父类--初始化块");    }    //构造器public Parent() {    System.out.println("父类--构造器");    }    }    public class SubClass extends Parent {    //静态变量public static String s_StaticField = "子类--静态变量";    // 变量public String s_Field = "子类--变量";    // 静态初始化块static {    System.out.println(s_StaticField);    System.out.println("子类--静态初始化块");    }    //初始化块{    System.out.println(s_Field);    System.out.println("子类--初始化块");    }    // 构造器public SubClass() {    System.out.println("子类--构造器");    }    // 程序入口public static void main(String[] args) {    new SubClass();    }     }