2010-10-04 159 views
1

好的,我有一個任務,我必須創建一個具有一組私有屬性的類,我已經完成了這個任務。它很棘手,因爲我對Java編程還是比較陌生的(或者一般的編程),而且在封裝時不太習慣。我之前沒有使用getters/setter或構造函數。我瞭解getter/setter方法,但尚未了解構造函數的任何在線信息,甚至不瞭解其用途。構造函數(java)

我必須爲每個屬性創建getters/setters和構造函數,所以看起來我應該學會使用這些方法。如果任何人都可以給我一個具有構造函數的類的例子,並解釋構造函數在做什麼,爲什麼我會使用它,這將是很好的。

謝謝你的時間提前。

+0

SO不是維基百科的替代品 - 遠離它:http://en.wikipedia.org/wiki/Constructor_(object-oriented_programming)。第一個例子是Java。 (或者更好的是,寫一本好書,你還有很多東西需要學習;)) – 2010-10-04 21:43:21

+0

簡而言之,一個構造函數*構造*你的對象。 – 2010-10-04 21:45:32

+0

「我對Java編程(或一般編程)相當陌生」因此,你以前使用過另一種編程語言嗎?哪一個? – mschonaker 2010-10-04 22:18:26

回答

4

首先,歡迎來到編程世界:)

讓我們看一個簡單的例子。

假設你想編程一個類來表示一個Square。當你創建一個Square對象時,你必須給Square一些屬性,比如每邊的長度。這是施工人員進場的地方。

類的佈局看起來像這樣,注意length_of_each_side變量沒有賦值。

public class Square { 
    int length_of_each_side; 

    public Square() { 
    ... 
    } 

    public Square(int length) { 
    ... 
    } 
} 

如果你不指定正方形的大小,你可以有一個默認的構造函數給你一個預定義的Square。

public Square() { 
    length_of_each_side = 1; 
} 

也可以允許。如果我想創建一個預先定義的廣場(長度1)有人到指定方

public Square(int length) { 
    length_of_each_side = length; 
} 

的大小,它看起來像這樣

Square mySquare = new Square(); 

如果我想創建一個Square並指定長度爲55,它看起來像這樣

Square mySquare = new Square(55); 
+0

偉大的,簡單的解釋,更不用說容易擴展,如果你想解釋構造函數時處理遺傳/多態性。 – Crag 2010-10-04 22:31:07

2

我不確定你是如何看待這個在學校或你的老師告訴你什麼,但只是一個建議 - 不要使用吸氣劑和安裝者作爲習慣的問題。有一個原因,他們不是Java中的「自動」,這是因爲他們真的不應該在那裏。

當你有一個對象時,想法是要求對象爲你做點事情 - 換句話說,你應該提供一些方法來爲你變量,而不是獲取變量並對其進行操作回來了。

有很多時候你不能避免吸氣 - 但只有在你確定需要吸氣時才能加入,而不是習慣。

您的構造函數是設置所有成員變量的最佳位置。事實上,如果你使變量成爲最終的(一個非常好的習慣,使得這個類是「不可變的」),構造函數將是唯一可以賦值的地方。

當你的對象被創建時,你的構造函數被保證被調用,所以它是一個設置對象的好地方。在你的構造函數中,如果你確保對象處於有效狀態並且你有最終的成員變量,那麼不可能讓你的對象進入無效狀態 - 這是一個非常方便的練習,可以爲你節省大量的調試時間。