当我尝试为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