2014-03-05 133 views
0

我有這個類沒有構造函數的Java類?

class Customer{ 
    int ID; 
    Time arriveTime; 
    Time serviceTime; 
    Time completeTime; 
    int transaction; 
} 

不要我需要一個構造函數,以設置裏面的值?我將使用這個類來保存不同的值,同時創建一系列客戶。這不意味着我會需要這個來設置值嗎?

public Customer(int id, Time arrive, Time service, Time complete, int trans){ 
      ID = id; 
      arriveTime = arrive; 
      serviceTime = service; 
      completeTime = complete; 
      transaction = trans; 
} 

我只需要客戶類來保存有關每個客戶的信息。

+0

除非你指定* some *構造函數Java提供了一個隱含的無參數構造函數,它將所有東西都設置爲零。 –

+0

請注意,上述內容與C/C++「結構」(這是一個不完全合理的對象,它將數據項組合在一起而不封裝它們)完全合理等價。並非所有情況都需要封裝 - 有時候這只是額外的工作。 –

回答

4

不一定,因爲默認情況下,沒有可見性修飾符的屬性(值)可以直接在相同包中的代碼的Customer實例上設置。

例如:

Customer c = new Customer(); // default constructor 
c.ID = 5; 
... (etc.) 

更多關於modifier access levels here

0

這些字段可以從類外部設置,這意味着您可以使用其他類來設置值。

然而,構造函數確實是一種更方便的方法,並且可以屏蔽另一個類對字段的操作(由可能干擾預期功能的某個程序員實現)。

如果僅用於存儲記錄的類,則可以使字段privatefinal並實現相應的獲取者。

0

您建議的方法在抽象和分離變量方面做得不好。它可以讓任何代碼隨意混淆。

Java的一部分是面向對象編程或面向對象編程。如果您將類別private中的某些部分與代碼的其餘部分分開,那麼它將限制訪問其他代碼,這有助於您的課程遵循OO原則封裝

相反,我會做一個構造函數,填寫適當的字段,如arriveid。我會使變量private。另外,我會讓id成爲一個靜態成員,因爲它會爲每個新客戶增加。

+0

爲什麼downvote? –

0

是的,你需要一個構造函數來創建對象時參數分配給你的類,或者你可以單獨引用每個變量雖然實例,並分配給它,如:

Customer c = new Customer(); 
c.id = 0; 
// etc 

的構造方法只是使這更容易爲你不需要編寫更多的代碼。

我建議使用構造函數將各種值分配給類實例,而不是每次創建對象實例時手動執行。

+1

構造函數如何使它更容易? –

+0

因此,您不必在每次創建對象的實例時分配各種參數,而是使用構造函數。節省您花費多少時間編寫代碼。 – Arbiter

+0

那麼寫'新Fred(a,b,b)'和'new Fred()之間的真正區別是什麼? instance.a = a; instance.b = b; instance.c = c;'?是的,你節省了輸入大約三十個字符,但在大多數情況下,這是花生。 –

0

你根本沒有定義構造函數,所以默認的構造函數會爲你添加。它將,但是,沒有設置任何這些領域的,所以你必須去:

Customer c = new Customer(); 
c.ID = 34 

等。幾件事:

  • 您沒有聲明訪問修飾符,所以同一包中的類將能夠調用c.ID,但其他不會。您可能想要公開聲明它們
  • 但是,如果您創建了getter和setter方法而不是授予對字段的訪問權限,那麼可能會更好。這樣你就可以在不改變接口的情況下改變字段