在两个不同的类中调用方法:调用彼此的方法

时间:2019-02-25 08:12:22

标签: java object methods

我有2个不同的类,它们都互相调用方法。由于某种原因,当我在该类中添加了一个已经有另一个类调用的对象的对象时,它给了我一个堆栈溢出错误。这是我要处理的内容:

ClassA:

public class ClassA {
    ClassB objA = new ClassB();
}

ClassB:

public class ClassB {
  ClassA objB = new ClassA();
}

尝试运行时,出现以下错误:

Exception in thread "main" java.lang.StackOverflowError
    at package.ClassB.<init>(ClassB.java)
    at package.ClassA.<init>(ClassA.java:26)
    at package.ClassB.<init>(ClassB.java:17)

第26行和第17行是创建对象的位置(就像上面的示例一样)。我的错误示​​例的后2行至少重复了50次。

1 个答案:

答案 0 :(得分:4)

创建ClassA的实例时,将创建ClassB的实例。

创建ClassB的实例时,将创建ClassA的实例。

因此,在创建这两个类中的任何一个的实例时,都会启动一系列无限的实例创建,从而导致StackOverflowError

如果您需要ClassA来保存对ClassB实例的引用,反之亦然,我建议您将一个引用传递给一个已创建的对象,而不是一个类在内部创建另一个实例的引用setter方法中的实例:

public class ClassA {

    ClassB objA;


    public setB (ClassB b) {
        objA = b;
    }
}

public class ClassB {

    ClassA objB;

    public setA (ClassA a) {
        objB = a;
    }

}

然后您以这种方式创建实例:

ClassA a = new ClassA();
ClassB b = new ClassB();
a.setB(b);
b.setA(a);