Java实例变量用方法初始化

buc*_*cky 15 java compilation initialization instance-variables

我对以下代码有点困惑:

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);          
  }
}
Run Code Online (Sandbox Code Playgroud)

这里的输出是0 29,但我认为这必须是一个编译器错误,因为当涉及到该方法时,变量h应该尚未初始化giveH().那么,编译是从上到下进行的?这为什么有效?为什么值为x0而不是29?

Tho*_*aud 21

默认值int0(见这里).因为x之前初始化h,giveH将返回int的默认值(例如0).

如果你这样切换订单

int h = 29;
int x = giveH();
Run Code Online (Sandbox Code Playgroud)

输出将是

29 29
Run Code Online (Sandbox Code Playgroud)

  • 该方法知道h,但不知道他的价值.当你调用`giveH()`时,`h`没有被初始化,所以他的值是'0'(不是29,顺序很重要).初始化变量时,只需调用一次`giveH()`. (5认同)