构造函数、静态语句块、非静态语句块的执行顺序
1用来测试的父类
public class testFather {
public testFather(){
System.out.println("我是无参数构造,父类");
}
public testFather(String a){
System.out.println("我是有参数构造,父类,参数是"+a);
}
//非静态语句块
{
System.out.println("我是父类的非静态语句块!");
}
//静态语句块
static{
System.out.println("我是父类的静态语句块!");
}
}
2.用来测试的子类
public class testSon extends testFather{
public testSon(){
System.out.println("我是子类的无参数构造!");
}
public testSon(String a){
System.out.println("我是子类的有参数构造,参数是"+a);
}
//非静态语句块
{
System.out.println("子类的非静态语句块!");
}
//静态语句块
static{
System.out.println("子类的静态语句块!");
}
}
3.测试方法类
public class testOrder {
public static void main(String[] args) {
new testSon();
// new testSon("a");
}
}
输出结果:
我是父类的静态语句块!
子类的静态语句块!
我是父类的非静态语句块!
我是无参数构造,父类
子类的非静态语句块!
测试结果:执行顺序是父类静态语句块>子类静态语句块>父类非静态语句块>父类的构造>子类的非静态语句块>子类的构造
总结:1.静态语句块优先级最高,父类的高于子类的;
2.非静态语句块先于构造先执行,先执行父类的在执行子类的