package practice;
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构造快");
}
public B(){
System.out.println("B无参构造器");
}
}
public class e3{
public static void main(String[] args){
A a=new B();
System.out.println("----------------");
B b=new B();
}
}
运行结果:
总结:
顺序:
父类(静态域按顺序加载)–>子类(静态域按顺序加载) –>父类(非静态变量,非静态代码块,构造函数)–>子类(非静态变量,非静态代码块,构造函数)
静态域:静态变量和静态块
(1)静态域是按先后顺序加载的
(2)当static变量初始化的时候先去调用构造块,再去调用构造函数(因为静态域只能加载一次,这是第二次去加载的话,就直接调用构造块和构造器了)
(3)静态域只能被调用一次,第二次创建B的时候就直接用构造块和构造器初始化了。