静态随着类的加载而加载,并且只加载一次。而构造代码块优先于构造方法执行,调用任意一个构造方法,都会执行构造代码块。
父类优先于子类加载
执行顺序
类的加载:
1、父类的静态成员
2、子类的静态成员
对象的创建:
子类构造方法中的代码执行之前,需要先执行:
1、super()
2、构造代码块
3、属性显式初始化
4、构造方法中的代码
public class 子父类之间静态与构造方法的顺序问题 {
public static void main(String[] args) {
new B();
}
}
class A{
static {
System.out.println("A");
}
{
System.out.println("这是类A的构造代码块");
}
public A(){
System.out.println("A的构造方法。。。");
}
}
class B extends A{
static {
System.out.println("B");
}
{
System.out.println("这是类B的构造代码块");
}
int a=fun();
public B() {
System.out.println("这是B的构造方法。。。。");
}
private int fun() {
System.out.println("这是属性赋初始值");
return 0;
}
}
运行结果
A
B
这是类A的构造代码块
A的构造方法。。。
这是类B的构造代码块
这是属性赋初始值
这是B的构造方法。。。。