寫一個棧溢出的程序


一般棧溢出在無限遞歸下出現,下面的程序在創建對象時出現棧溢出:

public class Main {
    public static void main(String[] args) {
        A a = new A();
    }
}

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

不應該是outofmemory嗎?棧里只有a這個reference,其引用的對象,以及對象里的a引用的對象都在堆里分配內存?

猜想(毫不負責):

應該是執行new A()時,調用構造函數,而構造函數初始化a需要調用構造函數,函數調用函數就會將函數地址壓棧,因為是無限創建對象,無限的調用構造函數,那就無限的壓棧,導致Exception in thread "main" java.lang.StackOverflowError。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM