Инициализация переменных экземпляра Java методом

Я немного запутался в следующем фрагменте кода:

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);          
  }
}

Выход здесь0 29, но я подумал, что это должно быть ошибкой компилятора, потому что переменная h не должна быть инициализирована, когда дело доходит до методаgiveH(), Итак, идет ли компиляция по строкам сверху вниз? Почему это работает? Почему ценностьx 0 а не 29?

Ответы на вопрос(6)

Ваш ответ на вопрос