1.1 構造方法介紹:
就是對象創建時要執行的方法對象進行屬性賦值。
構造方法的格式:
修飾符 構造方法名(參數列表)
{
}
構造方法的體現:
- 構造方法沒有返回值類型。也不需要寫返回值。因爲它是爲構建對象的,對象創建完,方法就執行結束。
- 構造方法名稱必須和類型保持一致。
- 構造方法沒有具體的返回值。
1.2 構造調用和內存圖解:
構造方法是專門用來創建對象的,也就是在new對象時要調用構造方法。
在創建對象時,會調用與參數列表對應的構造方法。
1.3默認構造方法和細節:
當在編譯Java文件時,編譯器會自動給class文件中添加默認的構造方法。如果在描述類時,我們顯示指定了構造方法,那麼,當在編譯Java源文件時,編譯器就不會再給class文件中添加默認構造方法。
構造方法的細節:
1、一個類中可以有多個構造方法,多個構造方法是以重載的形式存在的
2、構造方法是可以被private修飾的,作用:其他程序無法創建該類的對象。
1.4 構造方法和一般方法區別:
構造方法在對象創建時就執行了,而且只執行一次。
一般方法是在對象創建後,需要使用時才被對象調用,並可以被多次調用
2.1 this調用構造方法:
構造方法之間的調用,可以通過this關鍵字來完成。
構造方法調用格式:
this(參數列表);
構造方法的調用:
class Person {
// Person的成員屬性
private int age;
private String name;
// 無參數的構造方法
Person() {
}
// 給姓名初始化的構造方法
Person(String nm) {
name = nm;
}
// 給姓名和年齡初始化的構造方法
Person(String nm, int a) {
// 由於已經存在給姓名進行初始化的構造方法 name = nm;因此只需要調用即可
// 調用其他構造方法,需要通過this關鍵字來調用
this(nm);
// 給年齡初始化
age = a;
}
}
2.2 this的原理圖解:
哪個對象調用了this所在的方法,this就代表哪個對象。
調用其他構造方法的語句必須定義在構造方法的第一行,原因是初始化動作要最先執行。
2.3 成員變量和局部變量同名問題:
可以在成員變量名前面加上this.來區別成員變量和局部變量。
3.1 子父類中構造方法的調用:
在創建子類對象時,父類的構造方法會先執行,因爲子類中所有構造方法的第一行有默認的隱式super(); 語句。
格式:
調用本類中的構造方法
this(實參列表);
調用父類中的空參數構造方法
super();
調用父類中的有參數構造方法
super(實參列表);
子類會繼承父類中的內容,所以子類在初始化時,必須先到父類中去執行父類的初始化動作。這樣,纔可以使用父類中的內容。
當父類中沒有空參數構造方法時,子類的構造方法必須有顯示的super語句,指定要訪問的父類有參數構造方法。
3.2 子類對象創建過程的細節:
如果子類的構造方法第一行寫了this調用了本類其他構造方法,那麼super調用父類的語句還有嗎?
因爲this()或者super(),只能定義在構造方法的第一行,因爲初始化動作要先執行。
注意:
類中的構造方法默認第一行都有隱式的super()語句,在訪問父類中的空參數構造方法。所以父類的構造方法既可以給自己的對象初始化,也可以給自己的子類對象初始化。
如果默認的隱式super()語句在父類中沒有對應的構造方法,那麼必須在構造方法中通過this或者super的形式明確要調用的構造方法。
this super不能同時存在,任選其一,保證子類的所有構造方法調用到父類的構造方法即可。
小結論:無論如何,子類的所有構造方法,直接、間接必須調用到父類構造方法。