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

1、parent类(父类)

public class parent {

    public static int parentParamOne = 1;
    public static String parentParamTwo = "two1111";

    static{
        System.out.println("父类静态代码块开始执行");
        System.out.println("parentParamOne ==" + parentParamOne);
        System.out.println("parentParamTwo ==" + parentParamTwo);
        parentParamOne += 2;
        parentParamTwo = "two2222";
        System.out.println("父类静态代码块开始执行结束");
    }

    public parent(){
        System.out.println("父类构造函数开始执行");
        System.out.println("parentParamOne ==" + parentParamOne);
        System.out.println("parentParamTwo ==" + parentParamTwo);
        parentParamOne += 20;
        parentParamTwo = "two3333";
        System.out.println("父类构造函数开始执行结束");
    }
    
}

2、child类 

/*
 * 目标:测试子父类之间关于静态代码与静态变量  构造方法之间的执行顺序
 * */

public class child extends parent{

    public static int childParamOne = 1;

    public static String childParamTwo = "two1111";

    static{
        System.out.println("子类静态代码块开始执行");
        System.out.println("childParamOne ==" + childParamOne);
        System.out.println("childParamTwo ==" + childParamTwo);
        childParamOne += 2;
        childParamTwo = "two2222";
        System.out.println("子类静态代码块开始执行结束!!");
    }

    public child() {
        System.out.println("childParamOne ==" + childParamOne);
        System.out.println("childParamTwo ==" + childParamTwo);
        childParamOne += 222;
        childParamTwo = "two333";
        System.out.println("childParamOne ==" + childParamOne);
        System.out.println("childParamTwo ==" + childParamTwo);
    }

    public static void main(String[] args) {
        System.out.println("子类主方法开始运行!!!!!");
        new child();
    }
}

3、运行子类child类中的main方法:

执行结果:

总结:

Java中的静态变量和静态代码块是在类加载的时候就执行的,实例化对象时,先声明并实例化变量再执行构造函数。如果子类继承父类,则先执行父类的静态变量和静态代码块,再执行子类的静态变量和静态代码块。同样,接着在执行父类和子类非静态代码块和构造函数。

注意:(静态)变量和(静态)代码块的也是有执行顺序的,与代码书写的顺序一致。在(静态)代码块中可以使用(静态)变量,但是被使用的(静态)变量必须在(静态)代码块前面声明。

 最后给出执行步骤:

1、父类静态变量和静态代码块(先声明的先执行);

2、子类静态变量和静态代码块(先声明的先执行);

3、父类的变量和代码块(先声明的先执行);

4、父类的构造函数;

5、子类的变量和代码块(先声明的先执行);

6、子类的构造函数。