JAVA新手教學 -8 建構子
建構子是甚麼東西呢?在類別基礎的物件導向程式設計中,建構子是一個類別裡用於建立物件的特殊子程式,他可以初始化一個新建的物件,並時常會接受參數用來設定變數。建構子要怎麼產生呢?就讓我們一起看看吧!
建構子
- 每一個類別至少會有一個建構子。
- 在物件宣告時用於初始化物件的屬性變數。
- 語法: public 類別名稱(參數列){…….}
- 建構子是在執行new時,由系統呼叫該別的建構子以初始化新產生的物件,與方法相同,建構子可以設定0個以上的參數。
- 如果類別內沒有設計建構子,Java會提供一個預設建構子。
- 同一類別內,不同建構子參數列必須不同。
我們直接以實例來講解,今天有一個類別叫做Student,類別內有一private int型別屬性變數grade(年級),private String型別屬性變數gender(性別)。還有grade跟gender的setget方法。(getgender的第2個g改成大寫)
在新增一個含有main方法的類別Classroom,在main方法內產生同學們的資料並設定他們的屬性變數。
預設建構子
我們在上圖的Classroom類別中第6行與第9行程式碼,是產生物件的基本指令,以Student Sean=new Student();為例子new執行時會呼叫建構子,在這裡因為沒有設定建構子,所以Java會給定一個預設建構子也就是Student()。括號裡無任何參數。
不覺得每次產生一個新的物件,還要用set方法輸入他們的資料很麻煩嗎?這時候建構子的功用就來了!回到student類別在屬性變數的下方打上建構子的語法,設定參數列並在程式段內呼叫set方法,在將建構子的參數輸入給方法當引數。
這時候在跳回Classroom類別,你會發現剛剛建立的物件底下都會有紅色毛毛蟲。為甚麼會這樣呢?
原因很簡單,我們在上面有提到一個類別至少有一個建構子。原本的預設建構子Student()被Student(int a,String b)取代,導致這兩個物件沒辦法被初始化。如何解決呢?只需要在各自的括號內打入引數即可,接著也不需要再利用物件呼叫set方法了。注意!!!引數的順序、型別都要跟建構子的參數一樣喔!
如果需要抓某位學生的資料,可以利用get方法。
你可能覺得建構子沒什麼,複製貼上一個set方法再改名稱又不需要多久,何必要這麼麻煩?在真正的程式設計中,一個工程師針對一個專案可能需要建立上千甚是上萬的物件,他們才沒有那個美國時間浪費在複製貼上後更改方法名稱,而且那麼多物件下方還有set方法會導致程式的列數增加很多,對於視覺會非常不友善。看了這麼多,你理解了建構子的美妙了嗎?