调用顺序
静态代码块在new之前就会调用,事实上是在java虚拟机加载类的时候就调用;
其次调用构造代码块,如果有多个代码块,都按照编写顺序先后调用;
最后调用构造函数。
//输出结果:static块只会调用一次,如果没有new A,也是会调用static块的
/*
b static
a static
b consblock1
b consblock2
b cons
a consblock1
a consblock2
a cons
第二次new
b consblock1
b consblock2
b cons
a consblock1
a consblock2
a cons
*/
public class A extends B{
static{
System.out.println("a static");
}
{
System.out.println("a consblock1");
}
{
System.out.println("a consblock2");
}
A(){
System.out.println("a cons");
}
public static void main(String[] args){
new A();
System.out.println("第二次new");
new A();
}
}
class B{
static{
System.out.println("b static");
}
{
System.out.println("b consblock1");
}
B(){
System.out.println("b cons");
}
{
System.out.println("b consblock2");
}
}