《Head First Java》20200927讀書筆記

J-H-P-加-油-哦發表於2020-09-27

P245-

《Head First Java》20200927讀書筆記

Duck的簡易飼養方法

一定要有不需引數的建構函式。

如果Duck的建構函式需要一項引數會怎樣?
上一頁的Duck只有一個建構函式,且它需要一個int型的size引數。
想象一個你可以讓使用者在建立Duck時有兩個選項:一個可以指定Duck的大小(通過建構函式的引數),另外一個使用預設值而無需指定大小。
你無法只依靠單一的建構函式就能夠很清楚地達到這個目的。
要記得,如果某個方法或構造有一項引數,你就必須在呼叫該方法或建構函式的時候傳入適當的引數。
你沒有辦法作出一種沒給引數時,就使用預設值的方法,因為在這個情況下,沒有給引數就無法通過編譯程式。

public class Duck{
	int size;

	public Duck(int newSize){
		if(newSize == 0){//如果引數值為0就使用預設的大小
			size = 27;
		}else{
			size = newSize;
		}
	}
}

你需要兩種方法來建立出新的Duck:

public class Duck2{
	int size;

	public Duck2(){
		//指定預設值
		size = 27;
	}

	public Duck2(int duckSize){
		//使用引數設定
		size = duckSize;
	}
}

知道大小時:

Duck2 d = new Duck2(15);

不知道大小時:

Duck2 d2 = new Duck2();

因此這會需要兩個建構函式來分辨兩種選項。
一個需要引數,另外一個不需要引數。
如果一個類有一個以上的建構函式,這代表它們也是過載的。

過載與預設的建構函式

編譯器一定會幫你寫出沒有引數的建構函式嗎?
No!

如果你已經寫了一個有引數的建構函式,並且你需要一個沒有引數的建構函式,則你必須自己動手寫!
如果類有一個以上的建構函式,則引數一定要不一樣。
這就包括了引數的順序與型別,只要是不一樣就可以。

過載建構函式的意思代表你有一個以上的建構函式且引數都不相同

要點

  • 例項變數是儲存在所屬的物件,位於堆上。
  • 如果例項變數是個對物件的引用,則引用與物件都是在堆上。
  • 建構函式是個會在新建物件的時候執行程式程式碼。
  • 構造必須與類同名且沒有返回型別。
  • 你可以用建構函式來初始被建立物件的狀態。
  • 如果你沒有寫建構函式,編譯器會幫你安排一個。
  • 預設的建構函式是沒有引數的。
  • 如果你寫了建構函式,則編譯器就不會呼叫。

相關文章