class A{
static{B.sshow(0);}
static int sa=1;
static{B.sshow(1);}
{show(10);}
int a=1;
{show(11);}
A(){
a=2;
show(12);
}
void show(int label){}
}
class B extends A{
static{sshow(2);}
static int sb=1;
static{sshow(3);}
{show(13);}
int b=1;
{show(14);}
B(){
b=2;
show(15);
}
void show(int label){
System.out.println(label+": a="+a+" b="+b);
}
static void sshow(int label){
System.out.println(label+":sa="+A.sa+" sb="+B.sb);
}
}
public class C{
public static void main(String[] args){
new B();
}
}
输出:
============
0:sa=0 sb=0
1:sa=1 sb=0
2:sa=1 sb=0
3:sa=1 sb=1
10: a=0 b=0
11: a=1 b=0
12: a=2 b=0
13: a=2 b=0
14: a=2 b=1
15: a=2 b=2
说明对象初始化的顺序为:
为基类和子类静态成员分配存储空间
基类静态成员初始化
子类静态成员初始化
为基类和子类的非静态成员分配存储空间
基类非静态成员初始化
调用基类构造函数
子类非静态成员初始化
调用子类构造函数