飘飞的海

 

Java对象初始化顺序

一、无继承情况

静态变量、初始化块→非静态变量、初始化块→构造函数

 示例:Base类

class Base{
    public static String baseStaticStr="静态变量";
    {
        System.out.println("Base.非静态初始化块()");
    }
    static{
        System.out.println("Base."+baseStaticStr);
        System.out.println("Base.静态初始化块()");
    }
    public Base() {
        // TODO Auto-generated constructor stub
        System.out.println("Base.构造器():");
    }
}

建立测试类:

public class InitOrder {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Base base=new Base();
    }

}

输出结果:

Base.静态变量
Base.静态初始化块()
Base.非静态初始化块()
Base.构造器()

二、有继承的情况

父类的静态变量、初始化块→子类的静态变量、初始化块→父类的非静态变量、初始化块→父类的构造函数→子类的非静态变量、初始化块→子类的构造函数

添加子类:

class Child extends Base{
    public static String childsString="静态变量";
    {
        System.out.println("Child.非静态初始化块()");
    }
    static{
        System.out.println("Child."+childsString);
        System.out.println("Child.静态初始化块()");
    }
    public Child(){
        System.out.println("Child.构造器()");
    }
}

测试代码:

public class InitOrder {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Child child=new Child();
    }
}

输出结果:

Base.静态变量
Base.静态初始化块()
Child.静态变量
Child.静态初始化块()
Base.非静态初始化块()
Base.构造器()
Child.非静态初始化块()
Child.构造器()

posted on 2012-09-24 16:08  飘飞的海  阅读(163)  评论(0编辑  收藏  举报

导航