初始化列表的构造函数时的StackOverFlowError

0 java constructor arraylist

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

   }

 }
Run Code Online (Sandbox Code Playgroud)

抱歉略显蹩脚的格式.

The*_*ind 5

public MyArrayList() {

    this.test = new MyArrayList();

  }
Run Code Online (Sandbox Code Playgroud)

这个坏男孩正在给你这个问题.每当使用"new"运算符时,都会调用对象的构造函数.现在,在构造函数中,您再次使用"new".这个新的将再次调用你的MyArrayList构造函数(它再次使用new).这会以递归方式进行,直到Stack上没有剩余空间.所以你得到了StackOverflowError