Java 進階教學 : 物件導向進階觀念(一) - Constructor And this

Java Road Java Road


好的頻道需要你的支持,謝謝你使用Youtube影片的超級感謝功能給我們鼓勵。





好的頻道需要你的支持,謝謝你使用Youtube影片的超級感謝功能給我們鼓勵。


  使用者用 new ClassName() 建立物件,ClassName()就是建構方法(Constructor)。Java 語法中的任何類別都至少會有一個建構方法。使用者可以用關鍵字 new 呼叫適當的建構方法,環境在依照類別中欄位的宣告配置記憶體空間之後,便會呼叫該建構方法並執行裏面的內容。

  物件是環境依照類別中欄位的宣告配置的記憶體空間所儲存的資料。配置的記憶體空間是固定的,但儲存在記憶體中的資料可以由類別開發者指派,也可以開放給使用者指派。

  開放給使用者指派又可以分為:建立物件時指派與建立物件後指派。要讓使用者在建立物件時指派,開發者會宣告有參數的建構方法,讓使用者呼叫。使用者在呼叫建構方法時指派在參數列中的值,開發者在必要的檢查與運算後指派給欄位。

  使用者若希望物件建立完成時,物件就儲存指定的值,便呼叫有參數的建構方法;若沒有指定值的必要,便呼叫沒有參數的建構方法。

  這個機制就像我們在買手搖飲料時,在菜單上指定冰塊或糖的量,工作人員便會依照指定的量製作飲料。若沒有指定,工作人員便會放入預設的量。


  1. 欄位預設值
  2. 環境在配置記憶體時,會依照該欄位的型別指派預設值:0, 0.0, false, null

  3. 欄位初始化
  4. 若欄位的宣告敍述中有指派值,環境會在指派預設值之後,把宣告敍述的值指派給欄位。

  5. 預設的建構方法
  6. 若類別中沒有宣告任何建構方法,編譯器會置入一個沒有參數的建構方法,這個由編譯器置入的方法,稱之為預設的建構方法。但若類別中有宣告建構方法,無論數量與是否有參數,編譯器就不會置入預設的建構方法。

    因為有這個機制,所以 Java 語法中的任何類別都至少會有一個建構方法。但不是:至少會有一個沒有參數的建構方法

  7. 自訂建構方法
  8. 類別中可以有任意個參數列不一樣的建構方法。讓使用者可以依自己的需求指定物件欄位的值。

  9. this 
    • this() 
    • 依照參數列的樣式,呼叫本類別中的另一個建構方法,用來避免程式碼的重複撰寫。它一定是方法中的第一行敍述。

    • this.成員名稱
    • this 是執行這個方法的物件。this.成員名稱 可以用來存取這個物件的所有成員。
      •  在開發環境中方便存取物件成員。

      •  解決欄位區域變數名稱的模糊性。

    • this
    • this 是執行這個方法的物件。可以用來當參數,呼叫方法。

  10. 建構區塊
  11. 執行建構方法之前,由上而下執行。

作者 : 許裕永

許老師的回答: