我有 2 段来自 Java 的代码:
class Test1 {
index = 1;
int index;
}
相对
class Test2 {
{ index = 1; }
int index;
}
第一个编译失败,我猜是因为在定义之前使用了成员“索引”?第二个是没有错误的。我不明白为什么。你们能抽出几分钟来帮助我吗?非常感谢!
class Test2 {
{ index = 1; }
int index;
}
在上面的代码{ index = 1; }
中称为 as Instance initializer block
,它用于初始化类的实例变量,就像 初始化类static initializer block
的静态变量一样。
Java Compiler
会将这段代码复制到 each constructor
中,方便每个构造函数共享这段代码......
因此,无论在类中的位置如何(instance variable
即之前或之后)Instance initializer block
,它仍然可以访问。
请参阅此链接:
http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html
test2 编译是因为使用了 Initiallizer,它是编译是因为在调用任何构造函数之前调用了 initiallizer。