Thursday, May 25, 2006

Does static initializers loop infinitely if they reference each other in the initialization code?

package junk;

public class Test7{
public static void main(String... args)
{
System.out.println("x.i = " + X.i);
System.out.println("x.j = " + Y.j);
System.out.println("y.i = " + X.i);
System.out.println("y.j = " + Y.j);
}
}

class X{
static int i=1;
static int j=2;
static{
System.out.println("X static : before calling Y");
i = Y.i;
System.out.println("X static : after calling Y");
}
static{
System.out.println("next static block in X : start");
j = Y.j;
System.out.println("next static block in X : end");
}
}

class Y{
static int i=3;
static int j=4;
static{
System.out.println("Y static : before calling X");
i = X.i;
System.out.println("Y static : after calling X");
}
static{
System.out.println("next static block in Y : start");
j = X.j;
System.out.println("next static block in Y : end");
}
}

output:
X static : before calling Y
Y static : before calling X
Y static : after calling X
next static block in Y : start
next static block in Y : end
X static : after calling Y
next static block in X : start
next static block in X : end
x.i = 1
x.j = 2
y.i = 1
y.j = 2

No comments: