如果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基礎

          評論

          # re: 如果java類里的成員變量是自身的對象? 2009-02-16 19:11 kkcat

          這個問題注意到過,但是沒有細想,因為根本就沒想這么干過,絕對不能循環創建的,類的全局變量我是比較重視的,因為它會一直存在于當前實例的整個生命周期,相對來說如果可以用局部的變量盡量用局部的了,一個方法的執行時間在一個納秒以內,局部變量可以很快的回收,濫用也無所謂。  回復  更多評論   

          # re: 如果java類里的成員變量是自身的對象?[未登錄] 2011-09-09 16:52

          試過了,,根本不是什么死循環!!!  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2009年2月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          1234567

          導航

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          相冊

          收藏夾

          Friends

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 沈阳市| 玛纳斯县| 加查县| 东阳市| 开化县| 龙游县| 毕节市| 南丰县| 珠海市| 达孜县| 手机| 乌审旗| 阳信县| 武宣县| 玛多县| 航空| 探索| 宾川县| 和硕县| 阿拉善盟| 武陟县| 南陵县| 恭城| 始兴县| 敦化市| 徐州市| 柞水县| 通城县| 穆棱市| 阳泉市| 宕昌县| 重庆市| 灵丘县| 天等县| 涞水县| 济阳县| 四会市| 湟中县| 南和县| 繁峙县| 林口县|