static 关键字在这里做什么?

我是java初学者。我正在尝试这段代码,我在类本身中创建了类的实例。

http://img3.mukewang.com/6288d845000107e003740309.jpg

它给了我堆栈溢出错误。然后,我在类中将引用变量设为“静态”,现在它工作正常。

http://img3.mukewang.com/6288d84c0001d34f03830300.jpg

我的问题是静态关键字在这里做什么?我知道静态变量是只加载一次的类变量。但是,构造函数调用是否也应该进入对自身的递归调用?我无法从我对静态关键字的了解中得到任何答案。


繁星coding
浏览 96回答 2
2回答

人到中年有点甜

你有类似的东西(不能复制/粘贴屏幕截图!) class A {       private A a = new A();  }A因此,要在调用时创建一个实例,必须通过再次调用new A()来设置值。无限递归(直到你用完堆栈空间)。this.anew A()当您将该字段a设置为静态时,它不再在A构造实例时初始化,而是在加载类本身时仅初始化一次。

偶然的你

当类被初始化并且它有一个自己类型的成员时,成员本身被初始化为内部相同的成员,并且成员内部的这个成员被初始化......你看到这里的无限递归了吗?这就是您收到堆栈溢出错误的原因。static关键字使该成员不是类的一部分。它在全局上下文中初始化一次(例如,您不需要 D1 的实例来访问它。您键入 D1.obj 代替)。所以递归不会在这里发生。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java