首先看例子:
public class Test00 {
public static void main(String[] args) {
new RoundGlyph(4) ;
}
}
class Glyph {
static{
System.out.println("父类静态初始化块");
}
{
System.out.println("父类初始化块");
}
void draw() {System.out.print("Glyph.draw()") ;}
Glyph() {
System.out.println("before") ;
draw();
System.out.println("after") ;
}
}
class RoundGlyph extends Glyph {
private int radius = 1;
static{
System.out.println("子类静态初始化块");
}
{
System.out.println("子类初始化块"+radius);
}
RoundGlyph(int r) {
radius = r ;
System.out.println ("Hello world : " + radius) ;
}
void draw() {
System.out.println("Hello world : " + radius) ;
}
}
输出结果:
父类静态初始化块
子类静态初始化块
父类初始化块
before
Hello world : 0
after
子类初始化块1
Hello world : 4
执行顺序-------》
当类加载到内存,先执行最最顶端的父类的静态初始化块,依次往下执行。。。。。首先为子类对象分配足够的内存,但是其中的成员变量并未初始化,在执行父类的无参构造器,再初始化子类的成员变量,再执行子类的初始化块