qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          構造器的執行順序

           1、在沒有靜態塊的情況下,子類的對象創建時,父類的無參構造器-->子類的構造器(產生對象的構造器,如果是無參則執行的是無參構造器,如果執行的是有參則執行的有參構造器)。現在的父類中只有兩個構造器:
          1. Father.java  
          2.  Father {  
          3.     public Father(){  
          4.         System.out.println("我是父類的無參構造器");  
          5.     }  
          6.        
          7.     public Father(String username){  
          8.         System.out.println("我是父類有參構造器,傳過來的參數是+"+username);  
          9.     }  
          10. public class SonDemo extends Father{  
          11.    
          12.     public SonDemo(){  
          13.         System.out.println("我是--子類--的無參構造器");  
          14.     }  
          15.     public SonDemo(String username){  
          16.         System.out.println("我是子類的有參構造器,參數是"+username);  
          17.     }  
          18.        
          19.     public void sys(){  
          20.         System.out.println("我是子類的sys方法");  
          21.     }  
          22.        
          23.     public static void main(String[] args) {  
          24.         //里面的內容在下面有說明 
          25.     }  
          26.        
          27.        
          28.        
          29. }

            ① 子類使用無參構造器創建對象:

            在SonDemo 的main方法中加入創建對象的代碼:

          1. SonDemo son = new SonDemo();  
          2.        
          3. }

            我是父類的無參構造器

            我是--子類--的無參構造器

            ② 子類使用有參構造器創建對象:

            SonDemo的main方法中加入

          SonDemo son = new SonDemo("than you ma");

            那么控制臺打印的結果是:

            我是父類的無參構造器

            我是子類的有參構造器,參數是than you ma

            也就是說在子類調用無參構造器創建對象的時候,在執行它自己的有參構造器之前首先執行父類的無參構造器。

            ③ 在子類中創建父類的對象,使用無參

          1. SonDemo son = new SonDemo("than you ma");  
          2. Father ff = new Father();

            SonDemo的main方法中加入

            我是父類的無參構造器

            我是--子類--的無參構造器

            我是父類的無參構造器

            調用了父類的無參構造器,有參的創建對象調用的是有參構造器。

            總結:在創建子類對象的時候,首先會調用父類的構造器,讓后在調用子類相應的構造器創建對象,在子類創建父類對象時,就是直接調用父類自己相應的構造器。

          2、如果在子類和父類中存在靜態塊;執行順序有會是怎么樣的了?

            答,靜態塊會在構造器之前運行。不管是子類還是父類。創建一個對象的時候,會首先加載它的靜態塊。

          1. Father.java  
          2. public class Father {  
          3.    
          4.     //靜態塊  
          5.     static{  
          6.         System.out.println("father  static ");  
          7.     }  
          8.        
          9.     public Father(){  
          10.         System.out.println("我是父類的無參構造器");  
          11.     }  
          12.        
          13.     public Father(String username){  
          14.         System.out.println("我是父類有參構造器,傳過來的參數是+"+username);  
          15.     }  
          16. }  
          17.    
          18. SonDemo.java  
          19. public class SonDemo extends Father{  
          20.     //靜態塊  
          21.     static{  
          22.         System.out.println("sonDemo static ");  
          23.     }  
          24.        
          25.     public SonDemo(){  
          26.         System.out.println("我是--子類--的無參構造器");  
          27.     }  
          28.     public SonDemo(String username){  
          29.         System.out.println("我是子類的有參構造器,參數是"+username);  
          30.     }  
          31.        
          32.     public void sys(){  
          33.         System.out.println("我是子類的sys方法");  
          34.     }  
          35.        
          36.     public static void main(String[] args) {  
          37.         SonDemo son = new SonDemo();  
          38.     }  
          39. }

            ① 程序的結果:

          father static
          sonDemo static
          我是父類的無參構造器
          我是--子類--的無參構造器

            因為在創建子類對象之前:會創建父類的一個對象,而靜態塊會在main之前被加載,所以兩個類的靜態塊首先執行。

            然后執行構造器。

            ② 如果在子類中的main中只創建父類的對象結果是怎么樣的呢?

            打印結果:

          father static
          sonDemo static
          我是父類的無參構造器

            為什么子類的靜態塊會被加載了?是因為我們是在SonDemo中測試,如果在其他類中測試就不會打印。

            總結:我們說了這么多就是重要的一點。靜態塊會在構造器器之前執行。

          posted on 2012-05-18 09:41 順其自然EVO 閱讀(159) 評論(0)  編輯  收藏


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


          網站導航:
           
          <2012年5月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 巴林右旗| 仪陇县| 通城县| 沐川县| 岳阳县| 衡南县| 富裕县| 株洲市| 都江堰市| 新竹市| 东至县| 连城县| 上栗县| 威海市| 溧阳市| 固始县| 九江县| 三门县| 昆山市| 南投县| 广河县| 泽州县| 台南市| 临湘市| 滦平县| 金堂县| 浮山县| 长沙县| 吉木萨尔县| 扎囊县| 云梦县| 浪卡子县| 长汀县| 东兰县| 丰台区| 诏安县| 鄱阳县| 上饶县| 株洲市| 巴塘县| 张掖市|