静态代码块与父子类构造方法
先上代码
class A {
static {
System.out.print("1");
}
public A() {
System.out.print("2");
}
}
class B extends A {
static {
System.out.print("a");
}
public B() {
System.out.print("b");
}
}
public class C {
public static void main(String[] args) {
A a=new B();
System.out.println();
a=new B();
}
}
运行A a=new B(),结果是 1a2b。
再运行 a=new B(),结果2b,因为静态代码块只运行一次。
总结:执行顺序,先静态代码块再构造方法,先父类再子类,静态代码块只运行一次。
拓展:
- 顺序静态属性、属性、静态代码块、代码块、构造方法,先父类后子类
- 调用了有参数的构造方法就不会调用无参的构造方法。
- 默认调用无参的构造方法。