类字段的初始化

时间:2018-06-17 07:57:02

标签: java

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 初始化?

1 个答案:

答案 0 :(得分:1)

因为它(@override void initState() { super.initState(); AccountData d = new AccountData(); print(d.getData); } )在构造函数执行后无法重新初始化。创建对象时,它会初始化内联初始化的实例变量(此处为sumOFXandY = sumOFXandY + x)。然后执行构造函数块。

要解决此问题,请在构造函数中移动y