我不知道如何表达这个问题,我不是在寻求帮助,我只是想知道为什么这是可能的。假设我有一个类 foo:public class foo { private foo i = this; public foo() { ... }}为什么我可以设置i为类本身的实例?
2 回答
白猪掌柜的
TA贡献1893条经验 获得超10个赞
让我们看看foo
创建对象时会发生什么。
foo x = new foo();
遇到new
JVM 时会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
提交
取消