Java静态变量、非静态变量、静态代码块、构造方法的执行顺序
public class B {
//静态代码块
static {
i = 1;
}
//非静态变量
int b = 1;
//静态代码块
static {
i = 100;
//System.out.println(“B static2 i:”+i);
}
//静态变量
static int i =2;
//构造方法
public B() {
i++;
b++;
System.out.println(“B constructor i:”+i +" b:"+b);
}
//非静态代码块
{
i++;
b++;
System.out.println("B !static i:"+i +" b:"+b);
}
void disPlay(){
i++;
System.out.println("B disPlay i:"+i +" b:"+b);
}
static void staticTest(){
i++;
System.out.println("B staticTest i:"+i );
}
}
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();
}
}
建议思考后对答案
结果是
A static1 i:1
A static2 i:2
B !static i:3 b:2
B constructor i:4 b:3
A !static i:3 b:2
A constructor i:4 b:3
A disPlay i:5 b:3