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、子类的构造函数。