文章目錄:
何為構造方法?構造方法的作用?
構造方法的定義要求
構造方法的多載及多載作用
構造方法的特殊應用:匿名物件
構造方法與this關鍵字
構造方法與super關鍵字
何為構造方法?構造方法的作用?
類中存在屬性與方法,而方法又分為了普通方法和構造方法,
構造方法是在實體化物件的時候使用,主要功能是完成物件的屬性初始化功能,而普通方法則是在實體化物件后使用,
構造方法的定義要求
1.構造方法的名稱要和類名一致,
2.構造方法不允許有回傳值型別宣告,
值得注意的是:
1.如果你未定義構造方法,則類會自動生成一個無參無回傳值的構造方法,如下圖,

2.如果你定義了構造方法,那么類將不會再提供無參的構造方法,這在子類繼承方面很容易出錯,下面介紹,
構造方法的多載及多載作用
構造方法也是方法,是方法就可以多載,
多載示例如下:

為什么要多載?
多載可以在實體化物件的同時為物件的屬性賦值,
順帶一提,多載構造方法是最好按照引數由少到多規范排列,
構造方法的特殊應用:匿名物件
照例由代碼來說明,
package test;
//定義一個類
public class Father {
private String name;
private int age;
//無參構造方法
public Father() {
}
//構造方法多載
public Father(String name) {
this.name = name;
}
//構造方法多載
public Father(String name,int age) {
this.name = name;
this.age = age;
}
//setter、getter方法略
//定義一個普通方法
public void tell() {
System.out.println("姓名:" + this.name + ",年齡" + this.age);
}
}
package test;
//主方法演示
public class JavaDemo {
public static void main(String[] args) {
//存在堆疊記憶體參考指向的物件
Father firstFather = new Father("張三",18);
firstFather.tell();
//匿名物件
new Father("李四",19).tell();
}
}
如代碼所示,普通物件與匿名物件都使用了new關鍵字在堆記憶體中開辟了一塊空間,但是匿名物件沒有堆疊記憶體參考指向,所以只能使用這一次,并且使用完了后其堆記憶體空間成了垃圾空間,等待回收,
構造方法與this關鍵字
在當前類的構造方法中可以使用this()來呼叫本類中的其他構造方法也可以用this.方法()來呼叫本類中的普通方法,就像下圖這樣,
package test;
public class Father {
private String name;
private int age;
public Father() {
}
public Father(String name) {
this(); //看這里
this.name = name;
}
public Father(String name,int age) {
this(name); //還有這里
this.age = age;
}
//setter、getter方法略
public void tell() {
System.out.println("姓名:" + this.name + ",年齡" + this.age);
}
}
為什么要使用this()來呼叫其他建構式?
主要目的是提升構造方法中執行代碼的可重用性,沒錯,就是懶,你要是想自己再寫一遍也可以,
值得注意的是:
1.在使用this()時一定要放在方法的首句,
2.本類中未規定一定要使用this()呼叫其他建構式,【為什么要專門提這一句,請對比下面的super()】
構造方法與super關鍵字
觀察以下代碼,看看有意思的地方,



我呼叫子類的構造方法來實體化一個兒子,但是父類的構造方法也被呼叫了!
什么意思呢?就是說子類物件實體化前一定會實體化父類物件,實際上就相當于子類的構造方法中都隱藏著一句super(),當然它也一定要在方法中的第一句(系統偷偷放的),
所以重點來了!怎么解決這個問題?
1.父類中放一個無參的構造方法(結合上文所學,如果你自己寫了有參的構造方法,一定別忘了留一個無參的構造方法,),
2.如果父類中沒有無參的構造方法,那么就咱們就主動點,自己把super()寫了,按照你定義的構造方法來寫,如super(引數...),
3.用魔法來打敗魔法,我們把第一行給占了,寫上this(),但是實際上只不過是把矛盾轉移了,本類中的其他構造方法還是得呼叫父類構造方法,所以啊,至少要保留一個構造方法作為出口,而這個出口一定要去呼叫父類構造方法,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298747.html
標籤:其他
上一篇:C語言寫猜數游戲
