我不知道如何表达这个问题,我不是在寻求帮助,我只是想知道为什么这是可能的。假设我有一个类 foo:public class foo { private foo i = this; public foo() { ... }}为什么我可以设置i为类本身的实例?
2 回答
白猪掌柜的
TA贡献1893条经验 获得超10个赞
让我们看看foo创建对象时会发生什么。
foo x = new foo();
遇到newJVM 时会foo在堆中创建一个对象。下一步(注意它的下一步)是构造函数的执行。在 java 对象在堆上创建,然后构造函数被调用。这就是即使构造函数抛出异常,即使对象被创建(可以在 finalize() 中回收)的原因。因为对象已经创建并且存在于堆中,所以引用可以引用它。 this是对对象的引用。
现在private foo i = this;作为构造函数的一部分执行(这是按照 java 行为,所有实例字段如果在声明的地方初始化,它就会在调用构造函数时执行)。 this已经指代在堆上创建的对象,现在i还指代堆上的同一个对象。一旦构造函数成功执行,没有任何异常,变量x也指向堆上的同一个对象。
所以我们有一个对象,foo我们有对该对象的引用,如下所示:
this(来自 的实例方法foo)我们有实例可变
i我们有变量
x作为对该对象的引用
同样i是类型,foo因此它可以引用类型对象,foo并且this也是引用类型foo对象的类型引用foo。使i等于this使i也指代相同的对象。
希望这有助于消除您的疑虑。
添加回答
举报
0/150
提交
取消
