如果java類里的成員變量是自身的對象?
問題:如果java類里的成員變量是自身的對象,則新建該類對象時內存中怎么分配空間,我感覺好像死循環了。
不過我想的肯定是錯的,因為很多類的成員變量是自身對象,舉個例子:
Class A{
private String b ="Hello";
private A a = new A();
}
Class B{
public static void main(){
A p = new A();
}
}
在程序執行中,要new一個A類型的對象p,這時為對象p開辟內存空間,其中一部分存放字符串b Hello,另一部分存放對象a,可是我感覺a是一個對象,應該再開辟一塊空間存放a這個對象,可是應該在里面放什么呢?一個是hello,另一個又是A類的對象?
搜到的答案:
你的程序運行的時候會產生一個棧溢出錯誤的異常
Exception in thread "main" java.lang.StackOverflowError
你的思路是對的,但是,在main方法中創一個A對象,而A對象在初始化自己成員的時候,又會創另一個A對象,從而造成死循環,最終導至內存溢出。
你的A類如下:
Class A{
private String b ="Hello";
private A a = new A();
}
通常程序不會像你這樣寫,而是
Class A{
private String b ="Hello";
private A a; //= new A();
public anymothod(...){
//在某條件滿足時
a=new A();
}
}
也就是說類是自身成員的時候,通常不能初始化,而僅僅是一個定義,在滿足某些條件的時候,才去初始化,否則必然導至內存溢出。
posted on 2009-02-04 20:46 dreaming here 閱讀(2008) 評論(2) 編輯 收藏 所屬分類: JAVA基礎