gpt4 book ai didi

java - 在线程 "main"java.lang.StackOverflowError 中获取异常

转载 作者:行者123 更新时间:2023-11-29 07:00:19 24 4
gpt4 key购买 nike

我是 Java 和 OOP 的新手,这是我的问题。当我运行下面的代码时,我得到了

Exception in thread "main" java.lang.StackOverflowError.

问题出在我创建 JavaApplication1 对象的代码中。App2 类没有出现问题。如果对象 ja 是在 run 方法中创建的,则代码可以正常工作。你能解释一下为什么吗?

package javaapplication1;

public class JavaApplication1 {

int i, k, j;

class App2 {
int i = 23;
int j = 12;
}

App2 a2 = new App2();
JavaApplication1 ja = new JavaApplication1();

public void run() {
ja.i = 10;
a2.i = 26;
a2.j = 18;
System.out.println(i + "," + j + "'" + ja.i + "'"
+ a2.i + "'" + a2.j + "'" + k);
}

public static void main(String[] args) {
int k = 24;
JavaApplication1 ja1 = new JavaApplication1();
ja1.run();
ja1.i = 18;
System.out.println(ja1.i + "'" + "'" + k);
}
}

最佳答案

您的类 JavaApplication1 具有字段 JavaApplication1 ja,它包含 JavaApplication1 类的另一个实例,该类也有自己的 ja 字段,其中包含 JavaApplication1 的另一个实例,依此类推。

换句话说,当您创建 JavaApplication1 的实例时,此实例会创建其 JavaApplication1 的内部实例,而此内部实例会创建另一个 JavaApplication1 实例,它再次创建实例 JavaApplication1... 直到堆栈已满。

所以当你在主方法中运行这段代码时

JavaApplication1 ja1 = new JavaApplication1();

这样的事情发生了

       +-----------------------------------------------+
ja1 -> | JavaApplication1 instance |
+-----------------------------------------------+
| |
| +------------------------------------+ |
| ja -> | JavaApplication1 instance | |
| +------------------------------------+ |
| | | |
| | +-------------------------+ | |
| | ja -> |JavaApplication1 instance| | |
| | +-------------------------| | |
| | | | | |
| | | ja -> .... | | |
| | +-------------------------+ | |
| +------------------------------------+ |
+-----------------------------------------------+

无论如何,我看不到 ja 字段在哪里被使用过,所以考虑从您的代码中删除它。

关于java - 在线程 "main"java.lang.StackOverflowError 中获取异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27234399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com