Java 何时创建实例成员?
我有两段Java代码:Java 何时创建实例成员?,java,reference,Java,Reference,我有两段Java代码: class Test1 { index = 1; int index; } 对 class Test2 { { index = 1; } int index; } 第一个在编译时失败了,我猜是因为在定义成员“index”之前使用了它?第二个是无错误的。我不明白为什么。你们能抽出点时间帮我吗?非常感谢 第二个是编译的,因为第二个代码中存在的{…}内部结构是所谓的。Java编译器将此块复制到每个构造函数中 而且,与任何其他类方法一样,它可以使用该类中定义
class Test1 {
index = 1;
int index;
}
对
class Test2 {
{ index = 1; }
int index;
}
第一个在编译时失败了,我猜是因为在定义成员“index”之前使用了它?第二个是无错误的。我不明白为什么。你们能抽出点时间帮我吗?非常感谢 第二个是编译的,因为第二个代码中存在的{…}内部结构是所谓的。Java编译器将此块复制到每个构造函数中 而且,与任何其他类方法一样,它可以使用该类中定义的属性;定义此属性的确切位置并不重要—在该块上方或之前 第一个不编译,因为它根本不适合for类主体和成员声明,后者基本上定义了七件允许的事情:
test2是编译的,因为它使用了初始化器,它是编译的,因为在调用任何构造函数之前调用了初始化器
class Test2 {
{ index = 1; }
int index;
}
在上述代码中,{index=1;}
被称为实例初始值设定项块
,它用于初始化类的实例变量,就像静态初始值设定项块
对类的静态变量所做的那样
Java编译器
将将此块复制到每个构造函数
,使每个构造函数都可以轻松地共享此块代码
因此,无论实例变量
在类中的位置如何(即在实例初始值设定项块
之前或之后),仍然可以访问它
查看此链接:
你的编程语言是什么?对不起,是Java,我已经编辑了我的帖子。坦斯克!这里没有引用,只有基元类型。是的,没错。Java中初始化变量的另一种方法是使用初始值设定项,而不是使用构造函数。Test2({index=1;})中的花括号是一个初始值设定项,在创建索引后调用它。Test1尝试为尚未声明的变量赋值(index=1;)。