总结
创建子类对象时,子类和父类的执行顺序为:父类static变量(父类static块)–>子类static变量(子类static块)–>父类成员变量(父类构造块)–>父类构造函数–>子类成员变量(子类构造块)–>子类构造函数
其中static变量和static块、成员变量和构造块的执行顺序由代码块加载顺序决定
例子
父类
public class Basal {
static Temp a = new Temp("这是Basal基类的static变量");
Temp b = new Temp("这是Basal基类的成员变量");
Basal() {
System.out.println("这是Basal基类的无参构造方法");
}
Basal(Temp a, Temp b) {
this.a = a;
this.b = b;
System.out.println("这是Basal基类的有参构造方法");
}
static {
System.out.println("这是Basal基类的static块");
}
{
System.out.println("这是Basal基类的构造块");
}
}
子类
public class Sub extends Basal {
static Temp a = new Temp("这是Sub子类的static变量");
Temp b = new Temp("这是Sub子类的成员变量");
Sub() {
System.out.println("这是Sub子类的无参构造方法");
}
Sub(Temp a, Temp b) {
this.a = a;
this.b = b;
System.out.println("这是Sub子类的有参构造方法");
}
static {
System.out.println("这是Sub子类的static块");
}
{
System.out.println("这是Sub子类的构造块");
}
}
test
public class Temp {
Temp(String s) {
System.out.println(s + " ");
}
public static void main(String[] args) {
Sub sub = new Sub();
}
}
运行结果