为了账号安全,请及时绑定邮箱和手机立即绑定

static 关键字在这里做什么?

static 关键字在这里做什么?

繁星coding 2022-05-21 20:16:19
我是java初学者。我正在尝试这段代码,我在类本身中创建了类的实例。它给了我堆栈溢出错误。然后,我在类中将引用变量设为“静态”,现在它工作正常。我的问题是静态关键字在这里做什么?我知道静态变量是只加载一次的类变量。但是,构造函数调用是否也应该进入对自身的递归调用?我无法从我对静态关键字的了解中得到任何答案。
查看完整描述

2 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

你有类似的东西(不能复制/粘贴屏幕截图!)

 class A {    
  private A a = new A();
 }

A因此,要在调用时创建一个实例,必须通过再次调用new A()来设置值。无限递归(直到你用完堆栈空间)。this.anew A()

当您将该字段a设置为静态时,它不再在A构造实例时初始化,而是在加载类本身时仅初始化一次。


查看完整回答
反对 回复 2022-05-21
?
偶然的你

TA贡献1841条经验 获得超3个赞

当类被初始化并且它有一个自己类型的成员时,成员本身被初始化为内部相同的成员,并且成员内部的这个成员被初始化......你看到这里的无限递归了吗?这就是您收到堆栈溢出错误的原因。

static关键字使该成员不是类的一部分。它在全局上下文中初始化一次(例如,您不需要 D1 的实例来访问它。您键入 D1.obj 代替)。所以递归不会在这里发生。


查看完整回答
反对 回复 2022-05-21
  • 2 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信