Inicialización de variables de instancia de Java con método

Estoy un poco confundido sobre el siguiente código:

public class Test{

  int x = giveH();
  int h = 29;

  public int giveH(){
     return h;
  }

  public static void main(String args[])
  {
      Test t = new Test();
      System.out.print(t.x + " ");
      System.out.print(t.h);          
  }
}

La salida aquí es0 29, pero pensé que esto tenía que ser un error del compilador, porque la variable h no debería haberse inicializado cuando se trata del métodogiveH(). Entonces, ¿la compilación pasa por las líneas de arriba a abajo? ¿Por qué está funcionando esto? ¿Por qué es el valor dex 0 y no 29?

Respuestas a la pregunta(6)

Su respuesta a la pregunta