jialisoftw

          Java學習小 總結

          對靜態代碼塊以及構造函數的執行先后順序,一直很迷惑,看了孫偉琴老師的《java面向對象編程》又結合畢老師的java基礎視頻中的講解,現用下面的這段小程序來簡明扼要的敘述一下,以加深理解,與君共勉....
                                       

                          public class Fu {

                                                static {
                                                      System.out.print(1);

                                                            }

                                                public Fu() {
                                                       System.out.print(2);
                                                           }
                                                    }

                         public class Zi extends Fu {

                                                 static {
                                                      System.out.print("a");
                                                           }

                                                 public Zi() {
                                                      System.out.print("b");
                                                             }
                                                     }

                     public class demo {

                                    public static void main(String[] args) {
                                                   Fu fu = new Zi();
                                                   fu = new Zi();
                                                                }
                                                       }

          1.
                 當父類與子類都有靜態代碼塊和構造函數的時候,執行順序如下:

                 父類靜態代碼塊 > 子類靜態代碼塊 java虛擬機加載類時,就會執行該塊代碼。

                 父類構造函數 > 子類構造函數 (先有父親,后有孩子)

                 如果是多級繼承關系的話,高層的父類首先執行,然后依次遞減

              總結:靜態優先執行,父類優先于子類執行
                          靜態代碼塊是在JVM加載類的時候執行的,而且靜態代碼塊執行且僅執行一次


          2.

                 在調用類中的方法時,在方法體執行之前,首先要對類中的成員變量進行賦值,如果代碼中沒有賦具體的值,就會賦予變量默認值。成員變量的賦值順序按照前后順序進行。如果代碼中既有直接賦值,也有構造方法賦值,那么根據先后順序執行

          3.
                重寫(Override) 重載(Overload)
                重載,在一個類定義中,可以編寫幾個同名的方法,但是只要它們的簽名參數列表不同,Java就會將它們 看做唯一的方法。簡單的說,一個類中的方法與另一個方法同名,但是參數表不同,這種方法稱之為重載方法

              重寫,子類重新實現父類中的方法;
                 1. 發生方法重寫的兩個方法返回值,方法名,參數列表必須完全一致
                 2. 子類拋出的異常不能超過父類相應的方法拋出的異常
                 3. 子類方法的訪問級別不能低于父類相應方法的訪問級別(public,package,protected, private)

          4.

                動態綁定思想:在運行時環境中,當通過子類B調用一系列的實例方法(包括一個方法調用另一個方法),將優先和B類本身包含的實例方法動態綁定,如果B類沒有定義這個實例方法,才會與從父類繼承來的實例方法動態綁定。

          看了上面的說明,大家也應該知道上面的程序輸出結果了。
          輸出結果為:1a2b2b

          posted on 2012-10-27 14:12 飛豬一號 閱讀(1503) 評論(2)  編輯  收藏

          評論

          # re: Java學習小 總結 2012-10-27 15:37 王鵬飛

          很好,面試賽龍的時候問到了。筆試題目里面有。不過在父子類里還增加了一個函數:代碼塊但是沒有static修飾。  回復  更多評論   

          # re: Java學習小 總結 2012-10-30 14:24 吉安

          這個有點難學呀  回復  更多評論   


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


          網站導航:
           

          導航

          <2012年10月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          統計

          常用鏈接

          留言簿

          隨筆檔案

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 舒兰市| 怀柔区| 安福县| 安图县| 新宾| 大姚县| 嘉祥县| 天水市| 安溪县| 昭通市| 华亭县| 平湖市| 即墨市| 诸城市| 玉山县| 赫章县| 慈利县| 罗甸县| 景德镇市| 襄城县| 胶南市| 西青区| 尼勒克县| 怀来县| 洛浦县| 泸溪县| 长泰县| 疏勒县| 黄冈市| 松原市| 称多县| 保靖县| 旬阳县| 淳安县| 合阳县| 睢宁县| 吴江市| 宜城市| 会东县| 琼结县| 定结县|