class A {
static {
System.out.print("父类静态成员 ");
}
//初始化块,也即是非static语句块
{
System.out.print("父类非静态成员 ");
}
public A() {
System.out.print("父类构造方法 ");
}
}
class B extends A {
static {
System.out.print("子类静态成员 ");
}
{
System.out.print("子类非静态成员 ");
}
public B() {
System.out.print("子类构造方法 ");
}
}
public class Test {
public static void main(String[] args) {
A ab = new B();
System.out.println("\n---------------------------------");
ab = new B();
}
}
运行结果
结果说明
创建对象时调用顺序如下:
①先初始化父类和子类的静态成员。
②父类非静态成员。
③父类构造方法。
④子类非静态成员。
⑤子类构造方法。
另外需要注意的是,加static的语句块在加载类时就加载初始化了;不加static的语句块即初始化块,是在创建类的对象的时候才加载,在调用构造方法之前要先调用初始化块。