-4

如果 A 类有 B 类的引用,而 B 类有 A 类的引用,那么它在 Java 中是否可以接受?如果是,当我们执行类 A 的时候,类 B 将不会被实例化。那么编译器将如何执行B类的引用呢?

TIA

4

3 回答 3

7

如果 A 类有 B 类的引用,而 B 类有 A 类的引用,那么它在 Java 中是否可以接受?

是的。

当我们执行类 A 的时候,类 B 将不会被实例化。那么编译器将如何执行B类的引用呢?

您必须先创建一个对象,然后创建另一个对象,然后关闭循环来创建循环引用;例如像这样的东西。

A a = new A();
B b = new B(a);
a.setB(b);

(这假设A已经用setB(A)方法定义了类。还有其他方法可以形成循环,但这是最简单的。)


但请注意,您的术语完全错误。

  • 您不会“执行”课程。您实例化创建一个类的实例。
  • 编译器(例如javac)不会“执行”任何东西……它只是编译代码。
  • 执行(即运行)Java 代码的东西是Java 虚拟机;例如,当您使用java命令时。

(如果要与其他 IT 专业人员交流,学习和使用正确的 Java 术语很重要。它可以避免很多误解和混乱!)

于 2013-08-20T12:59:49.180 回答
1

这很好。

对象 A 可以引用对象 B,对象 B 可以引用对象 A。实际上,您经常在代码中的图中看到这一点,其中一个节点将引用整个图,而图则引用许多节点。

于 2013-08-20T12:58:46.770 回答
0

是的,这是可以接受的,因为编译器将对另一个类的调用存储为方法名称加上签名:参数类型,再次作为文本。

我什至见过以下恐怖

interface A {
    final A = new B();
}

class B implements A {
}

Java 是松散绑定的;有相应的运行时异常抛出。同样是针对另一个版本的库 jar 进行编译,并使用带有损坏 API 的 jar 运行。

于 2013-08-20T13:00:37.347 回答