cuiyi's blog(崔毅 crazycy)

          記錄點滴 鑒往事之得失 以資于發展
          數據加載中……

          JAVA基礎(二):函數執行順序(構造函數,多態,this指針)

          <示例1>
          請寫出運行結果
          答案
          分析

          <示例2>
          題目
          答案
          分析

          類初始化時構造函數調用順序:
            首先加載類,遇到extends字樣會停止加載當前類,加載父類,之后再繼續加載。
           
          當把一個類完全加載后,這個類的靜態成員將被先加載。之后進行如下流程:
          1
          )初始化對象的存儲空間為零或null值;
           2
          )調用父類構造函數;
          3
          )按順序分別調用類成員變量和實例成員變量的初始化表達式;
           4
          )調用本身構造函數

          <示例3>this指針
          題目
          答案


          實例方法專用于類的對象,但是在內存中只有一份實例方法供類的所有實例共享,因為為每個對象都復制一份所有實例方法代價很昂貴。
          所以系統中專門有這樣一種機制來保證:當你調用一個方法時,代碼是按專用于這個對象的方式進行,這種機制就是this

          每個實例方法都有一個名為this的變量,指的是調用該方法的當前對象。這種機制是當你的方法引用了類的一個實例變量是由編譯器隱含使用的

          即使對實例變量的每個引用實質上是有 this. 前綴的

          當調用一個實例方法時,this變量將被設置成引用它所起作用的特定類對象。


          所以的對象都共享這個備份,為了區分開到底是哪個對象在調用這個方法,關鍵的地方就是this的使用。this把調用方法的上下文對應到當前對象上

          本例分析:
          調用java中的所有成員變量或者成員函數都隱含了this。所以這個地方就很明了了:構造子類,this指針代表的當前對象是子類實例,子類實例為啥不調用自己overriding的方法呢?!

          參考分析

          參考java基礎(一)

          <示例4>

          題目
          答案
          分析:

          你總是可以從派生類構造器中調用一個適當的基礎類構造器,對基礎類構造器的調用必須放在派生類構造器的首位。

           

          如果派生類構造器第一個語句不是對基礎類構造器的調用,則編譯器將替你插入一個對默認基礎類構造器的調用:super()

           

          如果你自己定義了自己的構造函數,則編譯器認為是你會負責一個對象構造的全部細節問題,包括對默認構造器的任何要求,編譯器不將管理。

           

          如果你構造函數中要使用super() super this() this)等字樣,則必須放在第一行。

          如果你沒有顯示指定super() super)字樣,系統會在構造函數第一行自動插入super()字樣;如果你指定了,系統將按你指定的進行而不是默認的了。

          <練習1>

          題目

          答案


          <練習2>

          題目

           

          分析


          <練習3>

          題目

           

          答案


          題目

           

          答案
          題目
          答案
          題目



           <練習>

          題目
          答案
          分析

          posted on 2006-10-13 15:53 crazycy 閱讀(2522) 評論(3)  編輯  收藏 所屬分類: JavaSE語言

          評論

          # re: JAVA基礎(二):函數執行順序(構造函數,多態,this指針)[未登錄]  回復  更多評論   

          今天看到這個帖子,發現樓主分析的非常透徹,這對于學習JAVA的人來說非常的具有實用價值。

          感謝樓主。
          2007-07-24 14:02 | java愛好者

          # re: JAVA基礎(二):函數執行順序(構造函數,多態,this指針)  回復  更多評論   

          其他的網頁都可以看,這個網頁中的內容,點+號怎么也打不開啊???
          2008-01-25 17:31 | 小舟

          # re: JAVA基礎(二):函數執行順序(構造函數,多態,this指針)  回復  更多評論   

          為蝦米看不了代碼?
          2009-04-02 16:04 | redcoatjk
          主站蜘蛛池模板: 临江市| 林周县| 化隆| 江西省| 镇平县| 寿阳县| 色达县| 开化县| 岳普湖县| 汉寿县| 北京市| 苏尼特右旗| 大新县| 吉首市| 岫岩| 西城区| 平邑县| 合江县| 丹棱县| 星子县| 福州市| 伊金霍洛旗| 监利县| 稷山县| 阜康市| 韶山市| 宁安市| 湟中县| 双鸭山市| 留坝县| 宁武县| 苍梧县| 瑞安市| 凤冈县| 交城县| 安达市| 兴山县| 南岸区| 拉萨市| 安宁市| 和硕县|