首先先声明两个类
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
은 변경할 수 없습니다.