StackOverFlow错误 - 来自实例化我的对象类

时间:2009-06-30 13:09:27

标签: java stack-overflow

我正在尝试在Java中创建一个类,它构建一个类型为Action的对象,该对象包含三个整数并将其返回到数组history中的另一个类,其中history是一个 类型为Action的数组。当它被调用时,我立刻得到一个无限循环;因此堆栈溢出。

错误 - 我打印了1行,然后继续......

Exception in thread "main" java.lang.StackOverflowError
    at sudokugame.Action.<init>(Action.java:7)

类别:

public class Action {

    Action a;
    public Action(int i, int o, int p){
      a = new Action(i,o,p);
    }

    public void   setAction(int n, int b, int c){

    }

    public Action  getAction(){
        return a;
    }
}

8 个答案:

答案 0 :(得分:12)

你的构造函数永远递归地调用它自己。溢出堆栈的可靠方法:)

public Action(int i, int o, int p){
    //why do you do this?
    a = new Action(i,o,p);
}

也许您真正想要做的只是在类实例中存储i,o和p?

public class Action {

  int i;
  int o;
  int p;

  public Action(int i, int o, int p){
    this.i = i;
    this.o = o;
    this.p = p;
  }

  ...
}

(编辑:有关更全面的示例,请参阅other answer

答案 1 :(得分:3)

尝试这样做:

public class Action {

  int i;
  int o;
  int p;

  public Action(int i, int o, int p){
    this.i = i;
    this.o = o;
    this.p = p;
  }

  public void setAction(int n, int b, int c){
    this.i = i;
    this.o = o;
    this.p = p;
  }

  public Action getAction(){
    return this;
  }
}

答案 2 :(得分:2)

问题在于:

a = new Action(i,o,p);

您正在为类本身的构造函数中的新实例再次调用构造函数。由于每次对构造函数的后续调用都将创建一个新的构造函数调用,因此堆栈无法展开,因此会产生堆栈溢出。

答案 3 :(得分:0)

您自己实例化该类。

答案 4 :(得分:0)

你的Action类真的需要保持对另一个Action的引用吗?

Action a;

具体来说,这行必要吗?你用它做什么用?

答案 5 :(得分:0)

确保您的构造函数具有递归调用。

答案 6 :(得分:0)

Command design pattern是一种处理某种情况的方法,在这种情况下,你想要采取行动的历史,以便撤消,等等。

答案 7 :(得分:0)

构造函数有递归调用。