Java 代码中的 StackOverFlowError
StackOverFlowError in Java code
我正在编写一个简单的代码,但在第 2 行的以下代码中收到 WhosebugError:Tmp4 t = new Tmp4 ();
如果我省略第 6 行(p
的初始化)或省略第 2 行,我不会出错。我也没有进行递归调用。
我想问一下为什么会出现这样的错误。在省略第 2 行或第 6 行时,它不会给出 WhosebugError。
此外,它仅在我的系统上显示或代码有问题。
谢谢。
public class Tmp4 {
Tmp4 t = new Tmp4 ();
public static void main(String[] args) {
System.out.println("main");
Tmp4 p = new Tmp4 ();
System.out.println("main2");
}
}
通过执行 Tmp4 t = new Tmp4 ();
,您试图在其对象中初始化相同 class 的对象,该对象将无限递归并给您 Whosebug
异常。
如下所示删除此行:
public class Tmp4 {
/* Remove this line */
Tmp4 t = new Tmp4 ();
public static void main(String[] args) {
System.out.println("main");
Tmp4 p = new Tmp4 ();
System.out.println("main2");
}
}
public class Tmp4 {
Tmp4 t = new Tmp4 (); //Line 4
public static void main(String[] args) {
System.out.println("main"); // Line 1
Tmp4 p = new Tmp4 (); //Line 2
System.out.println("main2"); //Line 3
}
}
当你启动你的程序时,第一个执行的是第一行和第二行。
第 2 行是初始化 Tmp4 类型的新对象的地方。初始化第 4 行被调用,它再次创建一个 Tmp4 类型的新对象。随着 t 的初始化,第 4 行再次被调用,导致无限递归调用,因此出现 WhosebugException。删除第 4 行以消除 WhosebugException 的原因。因为第4行造成死循环,第3行一直没有执行。
WhosebugError 发生在你的代码中有一个无限循环,就像你在第 2 行中的那样。
public class Tmp4 {
Tmp4 t = new Tmp4 (); // This creates an infinite loop
}
第 2 行称为实例初始化程序,它甚至发生在构造函数之前。现在,由于您正在创建 Tmp4 的另一个实例,它随后将调用它自己的实例初始化器,后者将调用它们的实例初始化器,依此类推。循环永远不会结束。
我正在编写一个简单的代码,但在第 2 行的以下代码中收到 WhosebugError:Tmp4 t = new Tmp4 ();
如果我省略第 6 行(p
的初始化)或省略第 2 行,我不会出错。我也没有进行递归调用。
我想问一下为什么会出现这样的错误。在省略第 2 行或第 6 行时,它不会给出 WhosebugError。
此外,它仅在我的系统上显示或代码有问题。
谢谢。
public class Tmp4 {
Tmp4 t = new Tmp4 ();
public static void main(String[] args) {
System.out.println("main");
Tmp4 p = new Tmp4 ();
System.out.println("main2");
}
}
通过执行 Tmp4 t = new Tmp4 ();
,您试图在其对象中初始化相同 class 的对象,该对象将无限递归并给您 Whosebug
异常。
如下所示删除此行:
public class Tmp4 {
/* Remove this line */
Tmp4 t = new Tmp4 ();
public static void main(String[] args) {
System.out.println("main");
Tmp4 p = new Tmp4 ();
System.out.println("main2");
}
}
public class Tmp4 {
Tmp4 t = new Tmp4 (); //Line 4
public static void main(String[] args) {
System.out.println("main"); // Line 1
Tmp4 p = new Tmp4 (); //Line 2
System.out.println("main2"); //Line 3
}
}
当你启动你的程序时,第一个执行的是第一行和第二行。 第 2 行是初始化 Tmp4 类型的新对象的地方。初始化第 4 行被调用,它再次创建一个 Tmp4 类型的新对象。随着 t 的初始化,第 4 行再次被调用,导致无限递归调用,因此出现 WhosebugException。删除第 4 行以消除 WhosebugException 的原因。因为第4行造成死循环,第3行一直没有执行。
WhosebugError 发生在你的代码中有一个无限循环,就像你在第 2 行中的那样。
public class Tmp4 {
Tmp4 t = new Tmp4 (); // This creates an infinite loop
}
第 2 行称为实例初始化程序,它甚至发生在构造函数之前。现在,由于您正在创建 Tmp4 的另一个实例,它随后将调用它自己的实例初始化器,后者将调用它们的实例初始化器,依此类推。循环永远不会结束。