Is the following code the case of legal forward referencing? if yes why?
public class MyClass
{
private static int x = getValue();
private static int y = 5;
private static int getValue()
{
return y;
}
public static void main(String[] args)
{
System.out.println(x);
}
}
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:
x
and y
to zero, since that's the default value for int
s.x
by calling getValue()
, which reads the value of y
. Since y
hasn't yet been initialized, it still has the value 0.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!