当我尝试为MyArrayList(Java中的arraylist类的个人版本)编写构造函数时,为什么我总是收到java.lang.StackOverFlow错误,我感到困惑。我知道在进行递归调用时会发生StackOverFlow错误,但是我编写的代码似乎不是这样吗?有人可以帮我解释为什么我遇到这个错误吗?

这是我的代码,我已经包含了所有编写的构造函数,但是第一个MyArrayList()是错误在编译器中指示的构造函数。

public class MyArrayList<T> {

private int capacity;
private int size;
private T[] data;
**private MyArrayList<T> test;**

private T[] createArrayOfSize(int size)
{
    T[] newArray = (T[]) new Object[size];
    return newArray;

}


**public MyArrayList() {

    this.test = new MyArrayList();

  }**

 public MyArrayList (int initialCapacity) {

   test.data = createArrayOfSize(initialCapacity);

  }

 public MyArrayList(List<T> items) {


     for (int i = 0; i < items.size(); i++) {

       test.data[i] = items.get(i);

   }

 }


抱歉,格式有些cr脚。

最佳答案

public MyArrayList() {

    this.test = new MyArrayList();

  }


这个坏男孩给你的问题。每当您使用“ new”运算符时,都会调用该对象的构造函数。现在,在构造函数内部,您将再次使用“ new”。这个新函数将再次调用MyArrayList构造函数(再次使用new)。这将递归进行,直到堆栈上没有剩余空间为止。所以你得到StackOverflowError

10-06 01:50