public class InitializationTest {
private int x;
private int y;
private int sumOFXandY = x + y;
public InitializationTest(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public int getSumOFXandY() {
return sumOFXandY;
}
}
class Tester {
public static void main(String[] args) {
InitializationTest initializationTest = new InitializationTest(5, 6);
System.out.println(initializationTest.getX());
System.out.println(initializationTest.getY());
System.out.println(initializationTest.getSumOFXandY());
System.out.println(initializationTest.getX() + initializationTest.getY());
}
}
Output:
5
6
0 //Why not 11?
11
在上面的例子中,我的大脑无法理解这么简单的事情 - 一个启示。
创建类时,其字段将使用默认值进行初始化。在这种情况下,这些 0 。
调用构造函数 x 初始化为 5 , y 初始化为 6 。为什么然后 sumOFXandY 在某处,并且即使在调用构造函数之后仍然使用 0 进行初始化。为什么不用 5 + 6 = 11 初始化?
答案 0 :(得分:1)
因为它(@override
void initState() {
super.initState();
AccountData d = new AccountData();
print(d.getData);
}
)在构造函数执行后无法重新初始化。创建对象时,它会初始化内联初始化的实例变量(此处为sumOFXandY
= sumOFXandY
+ x
)。然后执行构造函数块。
要解决此问题,请在构造函数中移动y
。