如果在其上方调用方法,则实例静态变量不会在方法中初始化

时间:2016-06-08 08:59:35

标签: variables static instance final

public class MainClass {
   static final int i = GetI();
   static int j = 9;

   public static void main(String[] args) {
      System.out.println("i value : " + i);
   }

   static int GetI() {
      return j;
   }
}

以上代码打印'i值:0'
但是,该方法应返回j的值9,因此i的值为9 2.如果我们将变量j作为final,则输出将为'i value:9',这很好。

可能是什么原因?
感谢。

1 个答案:

答案 0 :(得分:1)

在变量i初始化后,您已声明变量j 。在main方法中,您正在访问正在调用GetI()方法的 i 。 GetI()方法返回 j ,直到j没有被初始化。你也没有因为访问j而得到错误,因为它被声明为静态变量,它的范围是类lebel。输出为 - 0,因为int的默认值为0,如果未初始化则使用该值。 尝试 - 在 i 之前声明变量 j ,然后输出您想要的9。这样做,将在以后使用之前初始化变量j。 希望这有帮助。