首页 > 解决方案 > 类字段的初始化

问题描述

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

标签: java

解决方案


因为 it( )在构造函数执行后sumOFXandY无法重新初始化。当您创建一个对象时,它会初始化内联初始化的实例变量(这里是sumOFXandY= x+ y)。然后构造器块被执行。

要解决这个问题,请sumOFXandY = x + y在构造函数内部移动。


推荐阅读