¿Cómo se puede acceder a una variable estática antes de la declaración?

public class Main {

    static int x = Main.y;
//  static int x = y; //Not allowed; y is not defined
    static int y = x;
    public static void main(String[] args) {
        System.out.println(x);//prints 0
    }
}

¿Cómo es que se me permite usar a través de la clase, pero no directamente?

¿Cuándo se define y?