构造方法的初始化顺序
假设您正在用java编写一个程序,并用下面的代码初始化A类和B类的对象:
A级
int a = f();
int f() {
返回1;
}
}
B类扩展了A {
int b = a;
int f() {
return 2;
}
}
公共类CtorDemo1 {
公共静态void main(String args[]) {
B bobj = new B();
system . out . println(bobj . b);
}
}
现在,似乎很明显,当初始化完成时,bobj.b的值将是1。毕竟B类中B的值是用A类中A的值初始化的,而A是用F的值初始化的,它的值是1,对吧?
其实bobj.b的值是2,你应该知道为什么要知道对象初始化的问题。
创建对象时,初始化按以下顺序进行:
1.将成员的值设置为默认初始值(0、false、null)
2.调用对象的构造函数(但是构造函数体还没有执行)
3.调用父类的构造函数。
4.使用初始化程序和初始块初始化成员。
5.执行构造方法。
看看实践中是怎么一步一步做的,看看下面的例子:
A级
一个(){
System.out.println("A.A调用");
}
}
B类扩展了A {
int I = f();
int j;
{
j = 37
System.out.println("执行初始化块");
}
B() {
System.out.println("B.B调用");
}
int f() {
system . out . println(" b . f called ");
返回47;
}
}
公共类CtorDemo2 {
公共静态void main(String args[]) {
B bobj = new B();
}
}
位律师回复
0条评论