1.用来测试的父类
package staticConstruct;
public class TestFather {
public TestFather() {
System.out.println("我是无参数构造,父类");
}
public TestFather(String a) {
System.out.println("我是有参数构造,父类,参数是" + a);
}
// 非静态语句块
{
System.out.println("我是父类的非静态语句块!");
}
// 静态语句块
static {
System.out.println("我是父类的静态语句块!");
}
}
2.用来测试的子类
package staticConstruct;
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.测试方法类
package staticConstruct;
public class TestOrder {
public static void main(String[] args) {
/**
* 子类的静态语句块! 我是父类的非静态语句块! 我是父类的静态语句块! 我是无参数构造,父类 子类的非静态语句块! 我是子类的无参数构造!
*/
new TestSon();
// new TestSon("a");
}
}
new TestSon()输出结果:
我是父类的静态语句块!
子类的静态语句块!
我是父类的非静态语句块!
我是无参数构造,父类
子类的非静态语句块!
我是子类的无参数构造!
new TestSon("a")输出结果:
我是父类的静态语句块!
子类的静态语句块!
我是父类的非静态语句块!
我是无参数构造,父类
子类的非静态语句块!
我是子类的有参数构造,参数是a
测试结果:执行顺序是父类静态语句块>子类静态语句块>父类非静态语句块>父类的构造>子类的非静态语句块>子类的构造
总结:1.静态语句块优先级最高,父类的高于子类的;
2.非静态语句块先于构造先执行,先执行父类的再执行子类的。