gpt4 book ai didi

java - 类字段的初始化

转载 作者:行者123 更新时间:2023-12-02 11:06:50 26 4
gpt4 key购买 nike

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

最佳答案

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

要解决此问题,请将 sumOFXandY = x + y 移至构造函数内。

关于java - 类字段的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50894752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com