下面代码该输出什么呢?
class A{
static {
System.out.println("AS");
}
public A() {
System.out.println("AC");
}
}
class B extends A{
static {
System.out.println("BS");
}
public B() {
System.out.println("BC");
}
}
public class Test{
public static synchronized void main(String []args)
{
new B();
new B();
}
}
输出:
AS
BS
AC
BC
AC
BC
从上述代码,我们可以看出,static是在类被初始化的时候执行的。
java初始化的加载顺序为:
父类静态成员变量 父类静态代码块 子类静态成员变量 子类静态代码块 父类非静态成员变量,父类非静态代码块,父类构造函数,子类非静态成员变量,子类非静态代码块,子类构造函数