gpt4 book ai didi

Java:堆栈溢出错误

转载 作者:行者123 更新时间:2023-11-29 10:15:17 25 4
gpt4 key购买 nike

我正在研究内部类概念并编写以下代码_

public class InnerClassConcepts {
private int x = 11;

public static void main(String... args) {
// method local 'x' variable
int x = new InnerClassConcepts().new InnerA().new InnerB().x;

InnerClassConcepts in = new InnerClassConcepts();
InnerA InnerA = in.new InnerA();
InnerA.InnerB xx = in.new InnerA().new InnerB();

System.out.println("InnerClassConcepts`s x = " + in.x);
System.out.println("InnerB`s x = " + xx.x);
System.out.println("main`s x(local variable) = " + x);
// System.out.println("InnerA`s x = " + InnerA.x);
System.out.println("InnerA`s y = " + InnerA.y);
}

/**
* Local inner class.
*/
class InnerA {
int y = 10;

/*
* java.lang.StackOverflowError coming over here... I don`t
* understand why?
*/
// int x=new InnerClassConcepts().new InnerA().new InnerB().x;//Line-29
/**
* Inner class inside an another Inner class.
*/
class InnerB {
private int x = 22;
int z = InnerA.this.y;

}

}
}

Output_

InnerClassConcepts's x = 11
InnerB's x = 22
main's x(local variable) = 22
InnerA's y = 10

我想知道为什么当我取消注释 line-29StackOverflowError 出现在 line-29 上。在 main 方法中同样有效。

Can somebody please help me where i am wrong or what concept is behind this?

最佳答案

让我们把这个例子简单一点,来解释会发生什么:

class Example {
private Example example = new Example();
}

当您创建一个新的 Example 对象时会发生什么?

新对象被创建,然后它的成员变量被初始化。类 Example 有一个成员变量,它是一个 Example。因此,为了初始化成员变量,创建了一个新的 Example 对象。该变量又具有一个类型为 Example 的成员变量,需要对其进行初始化。因此,再次创建了一个新的 Example 对象。那个又一次有一个需要初始化的 Example 成员变量。这将永远持续下去。

那里有一个无限递归循环,这会导致 StackOverflowError

当你取消注释第 29 行时,你的类 InnerA 中有完全相同的东西:成员变量 x 被初始化为一个新的 InnerA,它有自己的成员变量,用新的 InnerA 等初始化。

关于Java:堆栈溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19559637/

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