2014-09-22 58 views
0

我是java的新手,並試圖掌握最初的語言。在完成關於構造函數的講座後,我正在編寫一個程序。將值傳遞給返回類型爲void的構造方法時出錯?

Name.java

public class Name 
{ 
    public static String f; 
    public static String l; 
    public void Name(String First,String Last) 
    { 
     f = First; 
     l = Last; 
    } 

    public String getName() 
    { 
     return f + " " + l ; 
    } 
} 

NameTest.java

public class NameTest 
{ 
    public static void main(String[] args) 
    { 
     Name myName = new Name("Mohammad","Shahjahan"); 
     System.out.println(myName.getName()); 
    } 
} 

現在是在運行它時發生錯誤..

NameTest.java:5: error: constructor Name in class Name cannot be applied to given types; 
     Name myName = new Name("Mohammad","Shahjahan"); 
        ^
    required: no arguments 
    found: String,String 
    reason: actual and formal argument lists differ in length 
1 error 

如果我改變Name.java如下,沒有錯誤發生。

public class Name 
{ 
    public static String f; 
    public static String l; 
    public Name(String First,String Last) 
    { 
     f = First; 
     l = Last; 
    } 

    public String getName() 
    { 
     return f + " " + l ; 
    } 
} 

錯誤在哪裏?

+4

[_Constructor聲明看起來像方法聲明 - 除了它們使用類的名稱並且沒有返回type_](http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html) – 2014-09-22 18:10:14

回答

2

構造函數沒有返回類型,這

public void Name(String First,String Last) 
{ 
    f = First; 
    l = Last; 
} 

應該

public Name(String First,String Last) 
{ 
    f = First; 
    l = Last; 
} 

也是你的領域

public static String f; 
public static String l; 

不應該static

public String f; 
public String l; 
+0

哦..謝謝..請告訴我爲什麼我不能有公共靜態字符串? – jahan 2014-09-22 18:10:53

+4

@jahan不,當你不提供構造函數時,編譯器爲你添加一個無參數的構造函數。這個默認的構造函數不帶任何參數,但是你試圖提供2.這就是錯誤告訴你的。 – 2014-09-22 18:11:50

+0

但錯誤是在講一個不同的故事? – jahan 2014-09-22 18:12:43

0

構造函數不應該有返回類型,所以

public Name(String First,String Last) 
{ 
    f = First; 
    l = Last; 
} 

你看到正在發生,因爲沒有找到一個構造函數的錯誤,JAVA把默認的構造函數中沒有方法體:

public Name(){} 

所以通過嘗試呼叫new Name("firstName", "lastName"),它告訴你,唯一存在的構造函數Name()不能接受兩個字符串輸入。

此外,您應該從您的字段中刪除static。字段firstNamelastName引用單個Name對象 - 使它們爲靜態,使它們引用所有Name對象。

相關問題