静态块是类级别的,构造器是实例级别的,因此执行顺序是:先执行“静态代码块”,再执行“构造方法”
public class ShowMeBug {
static {
System.out.println("ShowMeBug static");
}
public ShowMeBug() {
System.out.println("ShowMeBug continoust");
}
public static void main(String[] args) {
new MyClass();
}
static class Test {
static {
System.out.println("test static");
}
public Test() {
System.out.println("test continoust");
}
}
static class MyClass extends Test {
static {
System.out.println("MyClass static");
}
public MyClass() {
System.out.println("MyClass continoust");
}
}
}
执行结果是:
ShowMeBug static
test static
MyClass static
test continoust
MyClass continoust
因为Main方法在ShowMeBug 类中,因此先进入ShowMeBug 类中,执行静态块,因为为实例化ShowMeBug ,因此ShowMeBug 构造器未调用;又因为MyClass继承至Test,因此会先进入Test类中。