class a{
int j=3;
static {//静态块,相当静态变量(.基类优先于子类)--->实变量初始--->构造器.
System.out.println("in a satic block.");
}
{
System.out.println("in a");//所有方法(包括构造器)调用之前先初始实变量
}
a(int i) {
System.out.println(j);
}
};
class b extends a{
private int ii=1;
static {
System.out.println("in b satic block.");
}
{
System.out.println("in b");//实变量(块)优先于方法调用,所以输出先于b类构造器中的输出System.out.println("b()");之前
}
b() {super(0);}
b(int i) {//
super(i);//即使基类是没参构造器,子类构造器也会默认调用super()来调用基类构造器(如果使用super(ii),则此时的ii一定为static,因为基类构造前要加载它,所以要用static先初始化;但是i就可以通过main()中创实例中带常量为参来构造.
System.out.println("b()");
}
public static void main(String[] args) {
new b(2);//如果没有此,则只是加载类,没有创建实例,所以只会输出static块
}
};
//output is :
in a satic block.
in b satic block.
in a
3
in b
b()