为什么在下面的代码中为可接受的静态变量赋值但是使用相同的变量呢?
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;
}
答案 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
}
}
使用前的声明