java中的循环引用

时间:2013-08-20 12:55:45

标签: java

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

TIA

3 个答案:

答案 0 :(得分:4)

  

如果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术语。这样可以避免很多错误传达和混淆!)

答案 1 :(得分:1)

这很好。

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

答案 2 :(得分:0)

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

我甚至看到过以下恐怖

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

class B implements A {
}

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