[英]Why does the java code below give StackOverflow error?
执行以下命令时出现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;
}
}
这行:
StackOverflow7 obj = new StackOverflow7();
当您创建StackOverflow7
的对象时, 总是会调用,这是您在此行本身中所做的。 因此,此行将递归调用自身,直到出现StackOverflow错误。
由于此行而导致堆栈溢出: StackOverflow7 obj = new StackOverflow7();
。 每当您创建新实例时,都会调用它,因此您将创建一个新实例并创建一个新实例,依此类推。 因此,在堆栈跟踪中,您应该看到很多<clinit>
行。
您可以通过调用StackOverflow7 localObj = new StackOverflow7();
开始整个操作StackOverflow7 localObj = new StackOverflow7();
在您的主要方法中。
要解决此问题,请将obj
静态字段,或者将其全部删除,因为无论如何您都不会使用它。
由于这一行:
StackOverflow7 obj = new StackOverflow7();
每次创建新对象时,该行都会执行并尝试创建另一个对象
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.