cuiyi's blog(崔毅 crazycy)

          記錄點(diǎn)滴 鑒往事之得失 以資于發(fā)展
          數(shù)據(jù)加載中……

          JAVA基礎(chǔ)(二):函數(shù)執(zhí)行順序(構(gòu)造函數(shù),多態(tài),this指針)

          <示例1>
          請寫出運(yùn)行結(jié)果
          答案
          分析

          <示例2>
          題目
          答案
          分析

          類初始化時(shí)構(gòu)造函數(shù)調(diào)用順序:
            首先加載類,遇到extends字樣會(huì)停止加載當(dāng)前類,加載父類,之后再繼續(xù)加載。
           
          當(dāng)把一個(gè)類完全加載后,這個(gè)類的靜態(tài)成員將被先加載。之后進(jìn)行如下流程:
          1
          )初始化對象的存儲(chǔ)空間為零或null值;
           2
          )調(diào)用父類構(gòu)造函數(shù);
          3
          )按順序分別調(diào)用類成員變量和實(shí)例成員變量的初始化表達(dá)式;
           4
          )調(diào)用本身構(gòu)造函數(shù)

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


          實(shí)例方法專用于類的對象,但是在內(nèi)存中只有一份實(shí)例方法供類的所有實(shí)例共享,因?yàn)闉槊總€(gè)對象都復(fù)制一份所有實(shí)例方法代價(jià)很昂貴。
          所以系統(tǒng)中專門有這樣一種機(jī)制來保證:當(dāng)你調(diào)用一個(gè)方法時(shí),代碼是按專用于這個(gè)對象的方式進(jìn)行,這種機(jī)制就是this

          每個(gè)實(shí)例方法都有一個(gè)名為this的變量,指的是調(diào)用該方法的當(dāng)前對象。這種機(jī)制是當(dāng)你的方法引用了類的一個(gè)實(shí)例變量是由編譯器隱含使用的

          即使對實(shí)例變量的每個(gè)引用實(shí)質(zhì)上是有 this. 前綴的

          當(dāng)調(diào)用一個(gè)實(shí)例方法時(shí),this變量將被設(shè)置成引用它所起作用的特定類對象。


          所以的對象都共享這個(gè)備份,為了區(qū)分開到底是哪個(gè)對象在調(diào)用這個(gè)方法,關(guān)鍵的地方就是this的使用。this把調(diào)用方法的上下文對應(yīng)到當(dāng)前對象上

          本例分析:
          調(diào)用java中的所有成員變量或者成員函數(shù)都隱含了this。所以這個(gè)地方就很明了了:構(gòu)造子類,this指針代表的當(dāng)前對象是子類實(shí)例,子類實(shí)例為啥不調(diào)用自己overriding的方法呢?!

          參考分析

          參考java基礎(chǔ)(一)

          <示例4>

          題目
          答案
          分析:

          你總是可以從派生類構(gòu)造器中調(diào)用一個(gè)適當(dāng)?shù)幕A(chǔ)類構(gòu)造器,對基礎(chǔ)類構(gòu)造器的調(diào)用必須放在派生類構(gòu)造器的首位。

           

          如果派生類構(gòu)造器第一個(gè)語句不是對基礎(chǔ)類構(gòu)造器的調(diào)用,則編譯器將替你插入一個(gè)對默認(rèn)基礎(chǔ)類構(gòu)造器的調(diào)用:super()

           

          如果你自己定義了自己的構(gòu)造函數(shù),則編譯器認(rèn)為是你會(huì)負(fù)責(zé)一個(gè)對象構(gòu)造的全部細(xì)節(jié)問題,包括對默認(rèn)構(gòu)造器的任何要求,編譯器不將管理。

           

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

          如果你沒有顯示指定super() super)字樣,系統(tǒng)會(huì)在構(gòu)造函數(shù)第一行自動(dòng)插入super()字樣;如果你指定了,系統(tǒng)將按你指定的進(jìn)行而不是默認(rèn)的了。

          <練習(xí)1>

          題目

          答案


          <練習(xí)2>

          題目

           

          分析


          <練習(xí)3>

          題目

           

          答案


          題目

           

          答案
          題目
          答案
          題目



           <練習(xí)>

          題目
          答案
          分析

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

          評(píng)論

          # re: JAVA基礎(chǔ)(二):函數(shù)執(zhí)行順序(構(gòu)造函數(shù),多態(tài),this指針)[未登錄]  回復(fù)  更多評(píng)論   

          今天看到這個(gè)帖子,發(fā)現(xiàn)樓主分析的非常透徹,這對于學(xué)習(xí)JAVA的人來說非常的具有實(shí)用價(jià)值。

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

          # re: JAVA基礎(chǔ)(二):函數(shù)執(zhí)行順序(構(gòu)造函數(shù),多態(tài),this指針)  回復(fù)  更多評(píng)論   

          其他的網(wǎng)頁都可以看,這個(gè)網(wǎng)頁中的內(nèi)容,點(diǎn)+號(hào)怎么也打不開啊???
          2008-01-25 17:31 | 小舟

          # re: JAVA基礎(chǔ)(二):函數(shù)執(zhí)行順序(構(gòu)造函數(shù),多態(tài),this指針)  回復(fù)  更多評(píng)論   

          為蝦米看不了代碼?
          2009-04-02 16:04 | redcoatjk
          主站蜘蛛池模板: 韶关市| 辉南县| 五寨县| 辽宁省| 绥中县| 麻江县| 靖远县| 调兵山市| 剑阁县| 平果县| 丰都县| 绥宁县| 远安县| 准格尔旗| 和林格尔县| 平果县| 南澳县| 遂昌县| 沂南县| 手机| 柳州市| 海伦市| 平武县| 高清| 颍上县| 三原县| 三河市| 英山县| 澳门| 海城市| 甘谷县| 亳州市| 新蔡县| 鹿泉市| 介休市| 迭部县| 五峰| 陆良县| 六盘水市| 平江县| 固阳县|