The above code you have is perfectly legal Java. In Java, static fields are initialized as follows: first, all fields are set to the default for their type (0, false
, or null
), and then initialized in the order in which they are declared. This means that the above code is guaranteed to do the following:
- Set
x
and y
to zero, since that's the default value for int
s.
- Initialize
x
by calling getValue()
, which reads the value of y
. Since y
hasn't yet been initialized, it still has the value 0.
- Initialize
y
to 5.
This means that x
will take the value 0 and y
will take the value 5. This behavior is portable and guaranteed. You can see this here.
Hope this helps!
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…