[英]Getting error when running the program
我有以下代碼:
ClassA.java
public class ClassA {
static boolean isDone = false;
public static void main(String[] args) {
System.out.println("In class A.");
if (!isDone) {
new ClassB();
isDone = true;
}
}
}
ClassB.java
public class ClassB {
ClassB () {
ClassA.main(null);
}
}
運行程序時,我得到以下輸出:
In class A.
In class A.
Exception in thread "main" java.lang.StackOverflowError
at sun.nio.cs.SingleByte.withResult(Unknown Source)
at sun.nio.cs.SingleByte.access$000(Unknown Source)
at sun.nio.cs.SingleByte$Encoder.encodeArrayLoop(Unknown Source)
at sun.nio.cs.SingleByte$Encoder.encodeLoop(Unknown Source)
at java.nio.charset.CharsetEncoder.encode(Unknown Source)
at sun.nio.cs.StreamEncoder.implWrite(Unknown Source)
它正在打印“ A級”。 符合預期,但是為什么我會得到棧溢出錯誤?
您在調用ClassB()
之后設置標志isDone
。 因此,將發生無限遞歸調用,這將在到達內存時導致StackOverFlowError
。
在調用ClassB();
之前設置標志( isDone
ClassB();
。
如下所示:
if (!isDone) {
isDone = true;
new ClassB();
}
您的代碼中有一個無限的方法調用鏈,這會導致StackOverflowError。 這是因為您正在從ClassB
的構造函數調用ClassA
的main方法。 您的main方法中的if塊將永遠無法完成。 代碼中的邏輯錯誤是在創建ClassB
實例之后而不是在此之前設置flag( isDone
)。
嘗試將if
塊從
if (!isDone) {
new ClassB();
isDone = true;
}
至
if (!isDone) {
isDone = true;
new ClassB();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.