Jason ---分享,共同進步

          激情成就夢想,努力創造未來
          隨筆 - 53, 文章 - 1, 評論 - 45, 引用 - 0
          數據加載中……

          一個java的基礎試題

          下面是一個java的基礎試題,我也記不起來在哪里看到了,應該有類似這樣的題。我們來看一下。
          例題1 :
          QUESTION NO: 1

            1、

          public class Test 

           


          QUESTION NO: 2

             2,

          public class Test {
              
              
          public static void group(test1 a){
                  a.setId(
          "2");
              }
              
              
          public static void main(String arg[]){
                  test1 a 
          =  new Test().new test1();
                  a.setId(
          "1");
                  group(a);
                  System.out.println(a.getId());
              }

              
              
          class test1{
                  String id;
                  String name;
                  
          public String getId() {
                      
          return id;
                  }

                  
          public void setId(String id) {
                      
          this.id = id;
                  }

                  
          public String getName() {
                      
          return name;
                  }

                  
          public void setName(String name) {
                      
          this.name = name;
                  }

              }


          根據上面的程序 1,我們看看得到的結果應該是什么。
          這道題涉及的問題就是對象與對象以用的問題,這個問題大家很容易混淆。這道題的答案是1234。
          那么根據問題1,你能否知道問題2的答案呢,問題2的答案是2.
          分析:對對象引用的不是很熟悉的人一定以為問題2的答案應該不變也是1,怎么是2呢.
          這就是涉及對象以及對象引用的問題了.
          一首先介紹一下對象的引用.
          創建對象
           創建一個對象,其實,它包含了四個動作。object a=new object();
          1)右邊的“new object”,是以object類為模板,在堆空間里創建一個object類對象(也簡稱為object對象)。
          2)末尾的()意味著,在對象創建后,立即調用object類的構造函數,對剛生成的對象進行初始化。構造函數是肯定有的。如果你沒寫,Java會給你補上一個默認的構造函數。
          3)左邊的“object a”創建了一個object類引用變量。所謂object類引用,就是以后可以用來指向object對象的對象引用。
          4)“=”操作符使對象引用指向剛創建的那個object對象。我們可以把這條語句拆成兩部分:
          object a;
          a= new object();
          效果是一樣的。這樣寫,就比較清楚了,有兩個實體:一是對象引用變量,一是對象本身。      
          在堆空間里創建的實體,與在數據段以及棧空間里創建的實體不同。盡管它們也是確確實實存在的實體,但是,我們看不見,也摸不著。
          不僅如此,我們仔細研究一下第二句,找找剛創建的對象叫什么名字?有人說,它叫“object”。不對,“object”是類(對象的創建模板)的名字。一個object類可以據此創建出無數個對象,這些對象不可能全叫“object”。      
          對象連名都沒有,沒法直接訪問它。我們只能通過對象引用來間接訪問對象。      
          為了形象地說明對象、引用及它們之間的關系,
          為了說明這個關系,我在網上看到別人的比喻挺好的我也引用一下:
          對象好比是一只很大的氣球,大到我們抓不住它。引用變量是一根繩,可以用來系汽球。       如果只執行了第一條語句,還沒執行第二條,此時創建的引用變量a還沒指向任何一個對象,它的值是null。引用變量可以指向某個對象,或者為null。它是一根繩,一根還沒有系上任何一個汽球的繩。執行了第二句后,一只新汽球做出來了,并被系在a這根繩上。我們抓住這根繩,就等于抓住了那只汽球。再來一句:       object a1;就又做了一根繩,還沒系上汽球。如果再加一句:       a1= a;系上了。這里,發生了復制行為。但是,要說明的是,對象本身并沒有被復制,被復制的只是對象引用。結果是,a1也指向了a所指向的對象。兩根繩系的是同一只汽球。       如果用下句再創建一個對象:a1= new object();則引用變量a1改指向第二個對象。       從以上敘述再推演下去,
          我們可以獲得以下結論:(1)一個對象引用可以指向0個或1個對象(一根繩子可以不系汽球,也可以系一個汽球);(2)一個對象可以有N個引用指向它(可以有N條繩子系住一個汽球)。      
          如果再來下面語句:       a= a1;按上面的推斷,a也指向了第二個對象。這個沒問題。問題是第一個對象呢?沒有一條繩子系住它,它飛了。多數書里說,它被Java的垃圾回收機制回收了。這不確切。正確地說,它已成為垃圾回收機制的處理對象。至于什么時候真正被回收,那要看垃圾回收機制的心情了。
          了解了上面的對象的引用,我們應該熟悉對象以及對象的引用了.我們回頭再說第一題

          java內部提供了幾個類,這些類可以不使用new關鍵字來初始化,例如: string

          上面問題1,可以改成下面的方法
            1、

          public class Test {

            
          public static void changeStr(String str){

            str
          =new String("welcome");

            }


            
          public static void main(String[] args) {

            String str
          =new String("1234");

            changeStr(str);

            System.out.println(str);

            }


            }




          通過上面對對象應用的理解,就知道原因了.

          posted on 2008-04-28 15:10 agun 閱讀(697) 評論(0)  編輯  收藏 所屬分類: java 基礎

          主站蜘蛛池模板: 衡水市| 永清县| 双城市| 景谷| 和田市| 柘荣县| 九寨沟县| 古交市| 花莲县| 澳门| 柘城县| 石城县| 衡阳市| 政和县| 铜鼓县| 霸州市| 温泉县| 常宁市| 灯塔市| 大足县| 克山县| 黔西县| 淮阳县| 安塞县| 东宁县| 中山市| 房产| 金溪县| 钦州市| 会宁县| 崇阳县| 萨嘎县| 固安县| 江西省| 宜春市| 吉水县| 嵊泗县| 桐庐县| 当涂县| 汤原县| 扎兰屯市|