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进行初始化?
解决方案
因为 it( )在构造函数执行后sumOFXandY
无法重新初始化。当您创建一个对象时,它会初始化内联初始化的实例变量(这里是sumOFXandY
= x
+ y
)。然后构造器块被执行。
要解决这个问题,请sumOFXandY = x + y
在构造函数内部移动。