猿问

将实例变量设置为类本身的实例

我不知道如何表达这个问题,我不是在寻求帮助,我只是想知道为什么这是可能的。


假设我有一个类 foo:


public class foo {


    private foo i = this;


    public foo() {

        ...

    }

}

为什么我可以设置i为类本身的实例?


四季花海
浏览 191回答 2
2回答

白猪掌柜的

让我们看看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也指代相同的对象。希望这有助于消除您的疑虑。

烙印99

Java中的变量就像指针,它们实际上并不是对象,而是指向保存对象的存储空间。所以你创建了一个指针,指向你自己的对象。
随时随地看视频慕课网APP

相关分类

Java
我要回答