Java中(静态)代码块、(静态)变量的执行顺序

Java中(静态)代码块、(静态)变量的执行顺序

父类代码

public class Parent {
    static {
        System.out.println("Parent static block");
    }

    {
        System.out.println("Parent non static block");
    }

    final static Value i = new Value("Parent static value");

    Value j = new Value("Parent non static value");

    Parent() {
        System.out.println("Parent Constructor");
    }
}

子类代码

public class Child extends Parent {
    static {
        System.out.println("Child static block");
    }

    final static Value i = new Value("Child static value");

    {
        System.out.println("Child non static block");
    }

    Value j = new Value("Child non static value");

    Child() {
        System.out.println("Child Constructor");
    }
}

变量类代码

public class Value {
    public Value(String value) {
        System.out.println(value);
    }
}

测试代码

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
    }
}

打印结果

Parent static block
Parent static value
Child static block
Child static value
Parent non static block
Parent non static value
Parent Constructor
Child non static block
Child non static value
Child Constructor

分析总结

  单从结果可以看出,实例化一个子类对象时,程序步骤如下:
1. 执行父类静态代码块和静态变量
2. 执行子类静态代码块和静态变量
3. 执行父类非静态代码块和非静态变量
4. 执行父类构造函数
5. 执行子类非静态代码块和非静态变量
6. 执行子类构造函数

  可以得出顺序:父类静态 子类静态 父类非静态 父类构造函数 子类非静态 子类构造函数

注意:以上流程步骤中具体的执行顺序,是由代码书写顺序决定的

猜你喜欢

转载自blog.csdn.net/u012102104/article/details/80165714
今日推荐