Inicialização de variáveis de instância Java com o método

Estou um pouco confuso sobre o seguinte trecho de 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);          
  }
}

A saída aqui é0 29, mas achei que isso deveria ser um erro do compilador, porque a variável h não deveria ter sido inicializada quando se trata do métodogiveH(). Então, a compilação passa pelas linhas de cima para baixo? Por que isso está funcionando? Por que o valor dex 0 e não 29?

questionAnswers(6)

yourAnswerToTheQuestion