我有一个学生班:
public String name;
public String surname;
public int age;
我有变量并且创建了对象:
public Student s = new Student ();
此外,在我的 Main 方法中,
Student s = new Student ();
我创建了该对象。为什么运行此代码时会出现 StackOverflowError?既然我在这里不断创建对象,那么我不需要先填充Heap内存吗?
Exception in thread "main" java.lang.StackOverflowError
at Student.<init>(Student.java:6)
at Student.<init>(Student.java:6)
at Student.<init>(Student.java:6)
at Student.<init>(Student.java:6)
您可能正在填充堆栈,但没有填充对象。它充满了对构造函数的调用,因为每次创建 Student 实例时,它都会尝试为 member s 创建一个额外的新实例,该实例也尝试创建另一个实例,等等。这相当于无限递归调用,正如预期的那样,最终会导致堆栈溢出。