class A{
static{
System.out.print("1");
}
public A(){
System.out.print("2");
}
}
class B extends A{
static{
System.out.print("a");
}
public B(){
System.out.print("b");
}
}
public class Code4{
public static void main(String[] ars){
A ab = new B();
ab = new B();
}
}
static{
System.out.print("1");
}
public A(){
System.out.print("2");
}
}
class B extends A{
static{
System.out.print("a");
}
public B(){
System.out.print("b");
}
}
public class Code4{
public static void main(String[] ars){
A ab = new B();
ab = new B();
}
}
然后是执行静态代码块(在加载时进行,与子类构造器调用无关)(先加载父类的其次是子类
的),完成以后程序才会进入main()方法中,执行new语句,两个都是先调用父类构造器再
调用子类构造器。所以你调用几次都是一样的顺序,而且不要认为第一次调用时会先执行静态
初始化块,不是这样的,静态的会在类加载时加载并初始化,那个时候程序只是在加载算是准
备阶段,只有之后进入main方法中才算是代码的开始运作。