实例初始化块按照定义它们的顺序执行。那么,为什么下面的代码在指示时会出现错误?
public class MyTest {
public static void main(String[] args) {
Tester t = new Tester();
}
}
class Tester {
{ int x; } // Instance initializer 1
{ x = 3; } // Instance initializer 2...ERROR cannot resolve symbol 'x'
Tester() { // Constructor
x = 5; // ERROR cannot resolve symbol 'x'
}
}
我认为编译器只是将实例初始化器分叉到构造函数的开头。如果是这样的话,这两个看起来都应该有效吗?
答案 0 :(得分:2)
因为x
未在任何地方声明为类成员。您在第一个实例初始化程序块中将其声明为局部变量,但第二个块不“知道”此局部变量。构造函数有同样的问题,x
未定义...
试试这样:
class Tester {
private int x;
{ x = 3; } // Instance initializer 1...
Tester() { // Constructor
x = 5;
}
}