public class A extends B {
//静态变量
static int i =1;
//静态代码块
static {
System.out.println(“A static1 i:”+i);
}
//非静态变量
int b = 1;
//静态代码块
static {
i++;
System.out.println(“A static2 i:”+i);
}
//构造方法
public A() {
super();
i++;
b++;
System.out.println(“A constructor i:”+i +” b:”+b);
}
//非静态代码块
{
i++;
b++;
System.out.println(“A !static i:”+i +” b:”+b);
}
void disPlay(){
i++;
System.out.println(“A disPlay i:”+i +” b:”+b);
}
static void staticTest(){
i++;
System.out.println(“A staticTest i:”+i );
}
void adisPlay(){
i++;
System.out.println(“A disPlay i:”+i +” b:”+b);
}
static void astaticTest(){
i++;
System.out.println(“A staticTest i:”+i );
}
public static void main(String[] args) {
A a = new A();
a.disPlay();
}
}
先试着写出运行结果,在把程序执行一遍,如果你的答案与运行结果一致,说明你已经理解了它们的执行顺序。
试着把 静态变量与静态代码块的顺序颠倒一下看看又是什么结果?