静态块和变量

时间:2011-08-13 06:18:01

标签: java

为什么在下面的代码中为可接受的静态变量赋值但是使用相同的变量呢?

class Test
{
static
{
   var=2;  //There is no error in this line
   System.out.println(var); //Why is there an error on this line if no error on the above     line
}
static int var;
}

3 个答案:

答案 0 :(得分:3)

您得到的错误是Test.java:6: illegal forward reference。在静态块之前移动int var

答案 1 :(得分:2)

因为the usage is not on the left hand side of an assignment,如下所述:

来自JLS的第8.3.2.3节初始化期间使用字段的限制

  

成员的声明只有在使用时才需要出现   成员是类或的实例(分别是静态)字段   接口C和所有以下条件成立:

     
      
  • 用法发生在实例(分别是静态)变量
    中   C的初始化程序或实例(分别是静态的)初始化程序
      C。

  •   
  • 用法不在作业的左侧。

  •   
  • C是封闭用法的最里面的类或接口。

  •   
     

如果上述三个要求中的任何一个出现,则会发生编译时错误   不满足。

答案 2 :(得分:0)

试试这样:

class Test
{
static int var;
static
{
   var=2;  //There is no error in this line
   System.out.println(var); //Why is there an error on this line if no error on the above     line
}
}

使用前的声明