java:访问静态块内的静态变量

Kai*_*ild 24 java static

分析以下静态块中的一些奇怪场景:

static {
  System.out.println("Inside Static Block");
  i=100; // Compilation Successful , why ?
  System.out.println(i); // Compilation error "Cannot reference a field before it is defined"
}

private static int i=100;
Run Code Online (Sandbox Code Playgroud)

使用时,相同的代码工作正常:

static {
  System.out.println("Inside Static Block");
  i=100; // Compilation Successful , why ?
  System.out.println(MyClass.i); // Compiles OK
}

private static int i=100;
Run Code Online (Sandbox Code Playgroud)

不确定为什么变量初始化在SOP需要时不需要使用类名进行变量访问?

ass*_*ias 14

这是因为初始化期间使用字段的限制.特别是,静态初始化块在声明它们的行之前使用静态字段只能在表达式的左侧(即赋值),除非它们是完全限定的(在您的情况下MyClass.i).

例如:如果您int j = i;在i = 100;获得相同错误后立即插入.

解决问题的显而易见的方法是在静态初始化块static int i; 之前声明.

  • 你不像你第一次看起来那么傻:) (4认同)