亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 New 關鍵字(構造函數)會給出 StackOverFlowError?

為什么 New 關鍵字(構造函數)會給出 StackOverFlowError?

倚天杖 2022-06-04 15:47:48
在下面給出的代碼中,看起來應該是HeapMemoryOverFlowError因為我們在對象內部創建對象,但它給出了StackOverflowError.public class JavaConcepts {    JavaConcepts jc = new JavaConcepts();    public static void main(String[] args) {        new JavaConcepts();         }}線程“主”中的異常java.lang.StackOverflowErrorat Java.JavaConcepts.<init>(JavaConcepts.java:5)at Java.JavaConcepts.<init>(JavaConcepts.java:5)at Java.JavaConcepts.<init>(JavaConcepts.java:5)at Java.JavaConcepts.<init>(JavaConcepts.java:5)
查看完整描述

2 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

問題在這里:

JavaConcepts jc = new JavaConcepts();

jc是一個實例變量,這意味著每個 JavaConcepts 類的實例都有一個。該變量在 JavaConcepts 實例被實例化時被初始化。

因此,請跟蹤執行時發生的情況new JavaConcepts()。這會創建一個新的 JavaConcepts 實例,而后者又會初始化該jc變量。為此,它創建了另一個 JavaConcepts 實例,而后者又需要初始化另一個jc. 這種情況一直持續下去,每次new JavaConcepts()初始化都發生在一個新的堆棧幀中。最終你用完了堆棧幀,你會得到一個 StackOverflowError。

視覺上:

    new JavaConcepts():
     jc = new JavaConcepts();
       jc = new JavaConcepts();
         jc = new JavaConcepts();
           jc = new JavaConcepts();
             ...
               (StackOverflowError)


查看完整回答
反對 回復 2022-06-04
?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

說明:在這個程序中,main() 方法調用 JavaConcepts() 方法。JavaConcepts() 方法遞歸調用自身。此實現將導致 JavaConcepts() 方法被無限次調用。在這種情況下,JavaConcepts() 方法將無限次添加到線程的堆棧幀中。因此,在幾千次迭代之后,線程的堆棧大小限制將被超過。一旦超過堆棧大小限制,將導致 StackOverflowError



查看完整回答
反對 回復 2022-06-04
  • 2 回答
  • 0 關注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號