我是java初學者。我正在嘗試這段代碼,我在類本身中創建了類的實例。它給了我堆棧溢出錯誤。然后,我在類中將引用變量設為“靜態”,現在它工作正常。我的問題是靜態關鍵字在這里做什么?我知道靜態變量是只加載一次的類變量。但是,構造函數調用是否也應該進入對自身的遞歸調用?我無法從我對靜態關鍵字的了解中得到任何答案。
2 回答

人到中年有點甜
TA貢獻1895條經驗 獲得超7個贊
你有類似的東西(不能復制/粘貼屏幕截圖!)
class A { private A a = new A(); }
A
因此,要在調用時創建一個實例,必須通過再次調用new A()
來設置值。無限遞歸(直到你用完堆??臻g)。this.a
new A()
當您將該字段a
設置為靜態時,它不再在A
構造實例時初始化,而是在加載類本身時僅初始化一次。

偶然的你
TA貢獻1841條經驗 獲得超3個贊
當類被初始化并且它有一個自己類型的成員時,成員本身被初始化為內部相同的成員,并且成員內部的這個成員被初始化......你看到這里的無限遞歸了嗎?這就是您收到堆棧溢出錯誤的原因。
static關鍵字使該成員不是類的一部分。它在全局上下文中初始化一次(例如,您不需要 D1 的實例來訪問它。您鍵入 D1.obj 代替)。所以遞歸不會在這里發生。
添加回答
舉報
0/150
提交
取消