天天看點

JAVA筆記:構造方法

 構造方法定義:

  【修飾符】 構造方法名(形參清單)

             {

                }

  【修飾符】:構造方法的上一級單元是類,是以修飾符可以public、protected(父子類通路權限)、private(本類通路權限)、預設(包通路權限)

  【沒有傳回類型】

  【構造方法名】:必須與類名一緻

  a.一般概念

  構造方法不能夠被繼承,也就構造方法不能夠被重寫

  構造方法是特殊的方法,不能夠被程式員直接調用,必須使用new關鍵字來調用,或者在構造方法中this(實參)調用本類構造方法,

  或者在構造方法中super(實參)調 用父類構造方法。

  b.建立對象執行過程

  首先配置設定記憶體空間,并且執行預設初始化操作(根、父、子類的順序配置設定空間),此時對象已經建立成功。

  然後執行初始化代碼塊,在執行構造方法(根初始化代碼塊、根構造方法、父初始化代碼塊、父構造方法、子初始化代碼塊、子構造方法的順序執行)。

  c.構造方法調用的規則

  首先判斷子類中是否有super(必須在構造方法中第一條語句使用)調用父類構造方法,如果有,則調用super比對的父類構造方法。

  如果沒有,如果父類顯式定義構造方法,則判斷是否有無參構造方法,如果有,則調用父類無參構造方法。

  如果沒有,則編譯出錯。

  如果父類沒有定義構造方法,則系統自動預設一個無參構造方法,并且執行體為空。

  最後判斷是否有this(必須在構造方法中第一條語句使用)調用本類構造方法,如果有,則調用this比對的本來構造方法

  d.構造方法中使用成員變量

  如果要調用父類的成員變量,可以使用super.變量

  如果要調用本類的成員變量,可以使用this.變量

  如果要調用局部變量,可以直接使用變量

  e.構造方法中使用成員方法

  如果要調用父類的成員方法,可以使用super.方法名(實參);

  如果要調用本類的成員方法,可以使用this.方法名(實參)或者方法名(實參);

  注意點:如果父類構造方法中調用普通方法,并且此普通方法在子類中被重寫,則父類構造方法中調用的普通方法為子類的普通方法,

  (也就是執行子類的普通方法),但此時子類的引用變量為null時沒有進行顯式初始化,是以有可能導緻null指針異常(如果在

  子類普通方法中使用子類的引用變量計算)。   

最新内容請見作者的github頁:http://qaseven.github.io/