JAVA筆記:構造方法
構造方法定義:
【修飾符】 構造方法名(形參列表)
{
}
【修飾符】:構造方法的上一級單元是類,所以修飾符可以public、protected(父子類訪問權限)、private(本類訪問權限)、默認(包訪問權限)
【沒有返回類型】
【構造方法名】:必須與類名一致
a.一般概念
構造方法不能夠被繼承,也就構造方法不能夠被重寫
構造方法是特殊的方法,不能夠被程序員直接調用,必須使用new關鍵字來調用,或者在構造方法中this(實參)調用本類構造方法,
或者在構造方法中super(實參)調 用父類構造方法。
b.創建對象執行過程
首先分配內存空間,并且執行默認初始化操作(根、父、子類的順序分配空間),此時對象已經創建成功。
然后執行初始化代碼塊,在執行構造方法(根初始化代碼塊、根構造方法、父初始化代碼塊、父構造方法、子初始化代碼塊、子構造方法的順序執行)。
c.構造方法調用的規則
首先判斷子類中是否有super(必須在構造方法中第一條語句使用)調用父類構造方法,如果有,則調用super匹配的父類構造方法。
如果沒有,如果父類顯式定義構造方法,則判斷是否有無參構造方法,如果有,則調用父類無參構造方法。
如果沒有,則編譯出錯。
如果父類沒有定義構造方法,則系統自動默認一個無參構造方法,并且執行體為空。
最后判斷是否有this(必須在構造方法中第一條語句使用)調用本類構造方法,如果有,則調用this匹配的本來構造方法
d.構造方法中使用成員變量
如果要調用父類的成員變量,可以使用super.變量
如果要調用本類的成員變量,可以使用this.變量
如果要調用局部變量,可以直接使用變量
e.構造方法中使用成員方法
如果要調用父類的成員方法,可以使用super.方法名(實參);
如果要調用本類的成員方法,可以使用this.方法名(實參)或者方法名(實參);
注意點:如果父類構造方法中調用普通方法,并且此普通方法在子類中被重寫,則父類構造方法中調用的普通方法為子類的普通方法,
?。ㄒ簿褪菆绦凶宇惖钠胀ǚ椒ǎ藭r子類的引用變量為null時沒有進行顯式初始化,所以有可能導致null指針異常(如果在
子類普通方法中使用子類的引用變量計算)。