为什么下面的 java 代码会出现 StackOverflow 错误?
Why does the java code below give StackOverflow error?
我在执行以下命令时遇到 Whosebug 错误:
public class Whosebug7 {
Whosebug7 obj = new Whosebug7();
int finalCount = 0;
public static void main(String[] args) {
for(int i = 1 ; i <= 5 ; i++)
System.out.println(i);
Whosebug7 localObj = new Whosebug7();
localObj.count(88);
System.out.println("Final Count :: " + localObj.finalCount);
}
private void count(int num){
finalCount = finalCount + num;
}
}
这一行:
Whosebug7 obj = new Whosebug7();
当您创建 Whosebug7
的对象时, 总是 调用 ,您正在这一行本身中执行此操作。因此,这一行递归地调用自身,直到出现 Whosebug 错误。
由于这一行,您得到堆栈溢出:Whosebug7 obj = new Whosebug7();
。每当您创建一个新实例时,它都会被调用,因此您创建了一个新实例并创建了一个新实例等等。因此,在您的堆栈跟踪中,您应该看到很多 <clinit>
行。
您可以通过在主方法中调用 Whosebug7 localObj = new Whosebug7();
来开始整个过程。
要解决此问题,请将 obj
设为静态字段或将其完全删除,因为无论如何您都不会使用它。
因为这一行:
Whosebug7 obj = new Whosebug7();
每次创建新对象时,该行都会执行并尝试创建另一个对象
我在执行以下命令时遇到 Whosebug 错误:
public class Whosebug7 {
Whosebug7 obj = new Whosebug7();
int finalCount = 0;
public static void main(String[] args) {
for(int i = 1 ; i <= 5 ; i++)
System.out.println(i);
Whosebug7 localObj = new Whosebug7();
localObj.count(88);
System.out.println("Final Count :: " + localObj.finalCount);
}
private void count(int num){
finalCount = finalCount + num;
}
}
这一行:
Whosebug7 obj = new Whosebug7();
当您创建 Whosebug7
的对象时, 总是 调用 ,您正在这一行本身中执行此操作。因此,这一行递归地调用自身,直到出现 Whosebug 错误。
由于这一行,您得到堆栈溢出:Whosebug7 obj = new Whosebug7();
。每当您创建一个新实例时,它都会被调用,因此您创建了一个新实例并创建了一个新实例等等。因此,在您的堆栈跟踪中,您应该看到很多 <clinit>
行。
您可以通过在主方法中调用 Whosebug7 localObj = new Whosebug7();
来开始整个过程。
要解决此问题,请将 obj
设为静态字段或将其完全删除,因为无论如何您都不会使用它。
因为这一行:
Whosebug7 obj = new Whosebug7();
每次创建新对象时,该行都会执行并尝试创建另一个对象