用<<Thinking in Java>>例子说明
public class Insect {
private int i=9;
protected int j;
Insect()
{
System.out.println("i="+i+",j="+j);
j=39;
}
private static int x1=printInit("static Insect.x1 initialized");
static int printInit(String s){
System.out.println(s);
return 47;
}
}
public class Beetle extends Insect{
private int k=printInit("Beetle.k initialized");
public Beetle() {
System.out.println("k="+k);
System.out.println("j="+j);
}
private static int x2=printInit("static Insect.x2 initialized");
public static void main(String []args) {
System.out.println("Beetle constructor");
Beetle b=new Beetle();
}
}
运行结果:
static Insect.x1 initialized
static Insect.x2 initialized
Beetle constructor
i=9,j=0
Beetle.k initialized
k=47
j=39
从中可以看出执行顺序:
父类静态,
子类静态,
父类非静态,
父类构造,
子类非静态,
子类构造
JAVA中赋值顺序
public class Insect {
public String type="Insect父类成员变量赋的值";
Insect()
{
System.out.println("Insect父类构造器--type-->"+type);
type="Insect父类构造器赋的值";
System.out.println("Insect父类构造器----type--->"+type);
}
{
System.out.println("block---type--->"+type);
type="Insect父类块赋的值";
}
}
public class Beetle extends Insect{
public String type="Beetle成员变量赋的值";
public Beetle() {
System.out.println("Beetle构造器---type--->"+type);
type="Beetle构造器赋的值";
}
public void t(){
System.out.println("t---type---->"+type);
}
{
System.out.println("block---type--->"+type);
type="Beetle块赋的值";
}
public static void main(String []args) {
Beetle b=new Beetle();
b.t();
}
}
block---type--->Insect父类成员变量赋的值
Insect父类构造器--type-->Insect父类块赋的值
Insect父类构造器----type--->Insect父类构造器赋的值
block---type--->Beetle成员变量赋的值
Beetle构造器---type--->Beetle块赋的值
t---type---->Beetle构造器赋的值
根据上面程序执行顺序
1.成员变量赋值>>>块赋值>>>构造器赋值
2.父类的块>>父类构造器>>自身块>>自身构造器
所以,程序的赋值步骤为
- 父类的静态变量赋值
- 自身的静态变量赋值
- 父类成员变量赋值
- 父类块赋值
- 父类构造器赋值
- 自身成员变量赋值
- 自身块赋值
- 自身构造器赋值