执行以下操作时出现StackOverflow错误:
public class StackOverflow7 {
StackOverflow7 obj = new StackOverflow7();
int finalCount = 0;
public static void main(String[] args) {
for(int i = 1 ; i <= 5 ; i++)
System.out.println(i);
StackOverflow7 localObj = new StackOverflow7();
localObj.count(88);
System.out.println("Final Count :: " + localObj.finalCount);
}
private void count(int num){
finalCount = finalCount + num;
}
}
答案 0 :(得分:4)
这一行:
StackOverflow7 obj = new StackOverflow7();
当您创建StackOverflow7
的对象时,始终,您正在此行中进行此操作。因此,这行以递归方式调用自身,直到出现StackOverflow错误。
答案 1 :(得分:1)
由于以下行而导致堆栈溢出:StackOverflow7 obj = new StackOverflow7();
。无论何时创建新实例,都会调用它,因此您可以创建新实例并创建新实例,依此类推。因此,在堆栈跟踪中,您应该看到很多<clinit>
行。
您可以通过在主方法中调用StackOverflow7 localObj = new StackOverflow7();
来启动整个事情。
要解决此问题,请将obj
设为静态字段,或将其完全删除,因为您仍然没有使用它。
答案 2 :(得分:0)
由于这一行:
StackOverflow7 obj = new StackOverflow7();
每次创建新对象时,此行都会执行并尝试创建其他对象