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