【问题标题】:How does JAVA allow class instantiation within the class?JAVA如何允许类内的类实例化?
【发布时间】:2020-08-14 05:55:49
【问题描述】:

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

class MyClass {
    private MyClass myClass;
//whatever
}

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

【问题讨论】:

  • 这不是实例化。它只是一个变量,除非它被分配,否则它保持 null 。如果它说private MyClass myClass = new MyClass();,那将导致无限递归。
  • 如果课堂就像房子的蓝图。你不能在蓝图中创建房子

标签: java late-binding


【解决方案1】:

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

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

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

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

private MyClass myClass = new MyClass();

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

【讨论】:

    【解决方案2】:

    myClass 的值默认不会被实例化。默认为null

    【讨论】:

      猜你喜欢
      • 2013-05-05
      • 1970-01-01
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      • 2017-10-12
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      相关资源
      最近更新 更多