2010-09-11 154 views
5

好吧,我正在爲學校做一份作業,並且設立了我的主類和另一個叫做Transaction的類。在我的主類中,我有:Java構造函數未定義?

Transaction t = new Transaction(); 

並且事務處理被加下劃線:它表示構造函數未定義。爲什麼?!

Transaction類看起來是這樣的:

public class Transaction { 

private String customerNumber, fName, lName, custAddress, custCity; 
private int custZip, custPhone; 

/** Constructor*/ 
public Transaction(String a, String b, String c, String d, String e, int f, int g){ 
    this.customerNumber = a; 
this.fName = b; 
this.lName =c; 
this.custAddress = d; 
this.custCity = e; 

} 

看起來它應該只是工作,但它只是沒有。即使當我將大量變量插入到我在main中創建新Transaction對象的位置時,它仍然表示未定義。有人請幫忙!

+1

看起來你需要閱讀至少一些Java 101才能入門。 – 2010-09-11 05:30:35

+0

我建議你也檢查你的變量名稱。另外,如果你沒有使用它們,爲什麼在構造函數中設置'f'和'g'? – 2014-01-30 22:19:06

回答

8

你的類沒有默認的構造函數定義。

當您提供至少一個參數化構造函數的定義時,編譯器不再爲您提供默認構造函數。

5

這是因爲你還沒有聲明一個沒有參數的構造函數。

當你根本沒有定義任何構造函數時,就會有一個默認構造函數,它沒有爲你自動定義任何參數。

但是現在你已經聲明瞭一個帶參數的構造函數,現在你需要傳遞它們或者聲明另一個沒有參數的構造函數。

+0

蟒蛇...潛意識泄露? :) – 2010-09-11 05:28:37

+0

血腥的iPad拼寫檢查 – Tom 2010-09-11 05:34:18

4

您需要創建一個默認構造函數(不帶任何參數)。

-5

那些說你沒有默認構造函數,因爲你用參數編碼構造函數的人都在想C++。對於C++而言,這是真的,但對於Java來說則不然。沒有這樣的事情作爲默認的構造函數。你必須爲你的類編寫任何構造函數。如果不打算構造任何對象,則不必具有構造函數。

+1

在Java中,如果您不指定構造函數,您將得到一個沒有參數的默認構造函數。 – 2010-09-11 06:03:53

+0

我嘗試過。你是說myClass mc = new myClass();可以使用,如果你沒有編碼的無參數構造函數?當我嘗試它時,這不起作用。 – 2010-09-11 07:09:32

+1

@JD Williams:默認的構造函數只有在你完全不指定其他構造函數時才存在,而不僅僅是沒有參數的構造函數。請參閱http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.8.9,其中定義了默認構造函數。 – 2010-09-11 08:05:54