Heim > Fragen und Antworten > Hauptteil
首先先声明两个类
public class Person {
.....
}
public class Student {
public Person A;
public Student(Person a) {
A = a;
}
.....
}
MainActivity
在实现抽象activity
时出现空的返回值
public abstract class Main2Activity extends AppCompatActivity{
Student B = getStudent();
oncreate(...){
......
getStudent().getA();
//A不为null
B.getA();
//A为null
}
public abstract Student getStudent();
}
MainActivity
public class MainActivity extends Main2Activity{
Person person = new Person(10);
@Override
public Student getStudent() {
Student student = new Student(person);
return student;
}
}
为什么会出现成员变量A为null
的情况,但是在声明周期中赋值时并不会出现这个问题.两种情况下成员变量B
都不会是null
,请问是我哪里理解错误了.
巴扎黑2017-04-17 17:51:13
这是类初始化时参数赋值顺序的问题,
在子类,也就是MainActivity
初始化时,首先会初始化父类,也就是Main2Activity
。这时候Main2Activity
中定义的Student B
就需要赋初值了,而初始值来自getStudent()
这个方法,于是这个方法就被执行。可是在这个方法执行的过程中,使用的MainActivity
中的Person person
其实还没有赋初值,其仍然还是null
,所以getStudent()
中引用的person
就是null
,这也就导致了后面调用getA()
的时候返回的是null
。MainActivity
中的Person person
的赋值,是在子类,也就是Main2Activity
初始化操作完成之后的,这个时候Student B
已经进行了赋值,所以这时候再对Person person
进行赋值,其实不能改变Student B
中引用的Person
。