2011-08-30 93 views
1

它說找不到Constructor Person(),但是我有班人。我的繼承人代碼構造函數錯誤,找不到

public class Person{ 

    private String name; 
    private int age; 
    public String details; 

    public Person(final String name, final int age){ 
     this.name = name; 
     this.age = age; 
    } 
} 

和測試人員類

public class TestPerson{ 
    public static void main(String args[]){ 
     int q; 
     System.out.println(args.length + "objects created"); 
     for(q = 1; q < args.length; q++){ 
      final Person p1 = new Person(); 
      for(int x = 0; x < args[q].length(); x++){ 
       args[q].split(","); 
       p1.setDetails(name, age); 
       System.out.println(p1); 
      } 
     } 
    } 
} 
+0

如下所述,沒有Person類的默認構造函數。 Java會自動爲任何沒有定義其他構造函數的類創建一個默認構造函數。既然你定義了一個構造函數,java將不會自動爲你創建一個。如果你需要一個默認的類構造函數,只需定義一個。 – DwB

回答

1

你聲明的人的構造要求有兩個參數。通過它兩個參數。

2

您的Person構造函數需要兩個參數。在測試程序中調用它時,必須傳遞兩個參數。

或者你可以創建第二個構造函數,它在你的Person類中沒有參數。

+0

isee。我已經嘗試過新人(姓名,年齡);但它也說年齡也「無法找到符號名稱」。 – JGE18

+0

當你打電話時,你必須給它實際值。像「新人」(「JGE18」,42);'。如果你做'新人(姓名,年齡)','姓名'和'年齡'必須是在該範圍內可見的變量。 – Mat

+0

isee,但值應該使用命令行參數。我嘗試新人(姓名[],年齡[]);看看它是否有效。 – JGE18

3
Person p1 = new Person(); 

由於您定義了帶參數的構造函數(並且沒有參數的構造函數),因此此行失敗。如果您沒有爲您的類定義任何構造函數,編譯器會插入一個空的默認構造函數。但是,如果您完全定義了任何構造函數,那麼編譯器不會插入默認構造函數,並且您需要提供所需的構造函數。

Sun Java Tutorial閱讀這些文章:

1

構造是

public Person(String name, int age) 

,所以你不能叫

Person p1 = new Person(); 

Person p1 = new Person(name, age); 

當然,你需要定義年齡第一,你的計劃似乎永遠不會做......

+0

我確實宣佈了。私人字符串名稱和私人時間。並嘗試過庇隆(姓名,年齡);已經。但它說找不到名字和年齡。 – JGE18