首页 > 解决方案 > JAVA如何允许类内的类实例化?

问题描述

我是 JAVA 新手。我想知道以下构造:

class MyClass {
    private MyClass myClass;
//whatever
}

这怎么不会导致无限递归?仅仅是因为后期绑定吗?

标签: javalate-binding

解决方案


取决于问题到底是什么。有两个原因:一个是静态的(为什么会编译),一个是动态的(为什么会运行):

  • 首先,在 Java 中,您永远不需要提前知道对象的大小,因为所有对象都分配在堆上,并且您不能在另一个对象中拥有一个对象(您只能存储对事物的引用,而不是事物本身)。

  • 其次,代码中的字段是使用空引用创建的。要在 Java 中创建一个新实例,您总是需要new

因此,您的示例可以编译并运行。如果您将行更改为:

private MyClass myClass = new MyClass();

尝试初始化时会出现堆栈溢出MyClass


推荐阅读