1. 程式人生 > >java中構造方法的理解,super()與構造方法,無參,有參構造方法,this()與構造方法。

java中構造方法的理解,super()與構造方法,無參,有參構造方法,this()與構造方法。

一、為什麼要引入構造方法。

當建立物件的時候需要對屬性值初始化,構造方法,即物件建立時要執行的方法。

要求在例項化的同時,就指定好name,和age的值。這就要用到構造方法。又叫做構造器Constructor.

二、構造方法的定義格式

構造方法在new的時候自動執行。且只執行一次。new一次執行一次。

注意:每個類都有構造方法,即使不寫也有,編譯時javac會自動檢查類是否有構造方法,如果有,就執行,沒有就自動新增一個。但是,如果你寫了一個帶有引數的構造方法,而沒有寫無參構造方法,就會報錯。

如上圖:如果不寫無參構造方法,就會報錯。同時也證明了,構造方法是可以過載的。

三、構造方法的過載

如果構造方法發生了過載,就要建立無參構造方法,否則會報錯。

那麼在建立物件時,需要通過構造方法來建立物件的,上圖說了,只有構造方法結束了,整個物件才算建立完成。因此可以通過不同的構造方法來建立物件。如圖:分別用兩種構造方法來建立物件。

分析:無參構造方法和例項化之間的關係。

無參構造方法,可以不寫,但是最終都會有的,跟是否例項化無關。但是如果許可權是private,那麼其他類就無法通過無參構造方法例項化,就會報錯。如圖所示:

四、構造方法和其他方法的區別

1、構造方法只能執行一次,其他方法執行次數沒有限制。

2、定義格式不同。構造方法沒有返回值,必須與類名相同。

五、this在構造方法之間的呼叫

首先說一下this的用處。

1、this.區分區域性變數和成員變數同名情況。

2、this用在構造方法中,用於呼叫了有參構造方法。

格式:this(引數列表); 此語句必須寫在第一行,才有效。

此語句的意義:減少了程式碼的書寫量。

六、super關鍵字在構造方法中的應用。

首先要明白super關鍵字的作用:

1、super是呼叫父類的成員方法或成員變數。

但是還有一個問題:

也就是說子類物件中,父類的構造方法會先執行。那麼為什麼要執行父類構造方法呢?

假設,建立了一個父類,含有一個成員屬性a=1;含有一個構造方法,將a=5;。因為如果子類建立的物件呼叫父類的成員變數a時,在不新增super()時,會得到a=1;如果新增super()就會得到a=5;我們都知道,構造方法在建立物件時執行,a應該等於5,故如果不呼叫super()就會得到錯誤的值。

2、super()在構造方法中是呼叫父類構造方法的意思。

當建立子類物件時,父類物件先進記憶體。這樣子類才能自動擁有父類的成員。

3、子類的構造器,無論過載多少個,第一行必須是super();當你不寫時表示空參super();是否寫引數,要根據父類決定,父類有引數,那麼子類的super()必須有引數。

4、構造方法無法繼承,自然也沒有重寫這個概念。

5、super()語句必須是構造方法的第一行程式碼。

總結一下:其實這些內容說白了,就是在說一句話。

即:如果父類中沒有無參構造方法,那麼子類必須用super(帶參)顯示的呼叫父類的構造方法。

super是父類物件引用,this是本類物件引用。super(),this()都必須放在構造方法的第一行,super()和this()絕不能一塊用,super(),this()無參時可以省略不寫。

上圖很重要。終於明白了為什麼有的類沒有在有引數建構函式的情況下,沒有寫無參也可以。問題的關鍵是物件是有參還是無參來構建的。若用無參物件構建,那麼類中必須有無參建構函式,(在類中含有有參建構函式的情況下。)

 

快捷鍵:ctrl+T   用於開啟繼承關係圖。

注意:若不確定該類是否是抽象類,可以這樣想,該類的方法在做什麼?如果方法內容不明確,就是抽象類。