2012-07-22 73 views
1

我有一個語法錯誤,我不知道如何解決它。該代碼似乎正確的我,但是Eclipse是告訴我,「構造函數調用必須在 構造函數的第一個語句」的方法setName()setAge()構造函數和關鍵字'this'

public class KeywordThis { 


    private String name; 
    private int age; 

    public KeywordThis(){ 

     this.name = "NULL"; 
     this.age = 0; 

    } 

    public KeywordThis(String s, int a){ 

     this.name = s; 
     this.age = a; 

    } 

    public KeywordThis(String s){ 

     this.name = s;  
    } 

    public KeywordThis(int a){ 

     this.age = a; 

    } 

    public int setAge(int a){ 

     this(a); 
    } 

    public String setName(String s){ 

     this(s); 
    } 






    public static void main(String args[]){ 








    } 


} 

回答

5

你不能從實例方法調用這樣的構造函數。你希望你的setter改變你已有的對象的值,而不是創建一個新對象。我想你的意思要做到這一點:

public void setAge(int a){ 

    this.age = a; 
} 

public void setName(String s){ 

    this.name = s; 
} 

另外請注意,您的制定者通常不返回值,所以我已經改變了他們返回void類型。

0

作爲一個說明,你的制定者應該像

public void setAge(a) { 
    this.a = a; 
} 

而不是構造一個新的對象。如果你不這樣做,你正在打破一個無庸置疑的Java約定。

假設你想創建一個二傳手一個新的實例,你會做這樣的事情

public KeywordThis setAge(a){ 
    return new KeywordThis(a); 
} 

,而不是使用this(a)。正如您嘗試使用this應該只在一個構造函數中完成(爲同一個類調用另一個構造函數)。

1

一旦創建了一個對象,就不能手動調用該構造函數。構造函數只能在另一個構造函數中調用。

正如其他人所指出的它應該是:

public void setAge(int a) { 
    this.a = a; 
} 
+0

感謝,這是非常有益的 – 2012-07-22 23:49:38

0

公共類KeywordThis {

private String name; 
private int age; 

public KeywordThis(){ 

    this.name = "NULL"; 
    this.age = 0; 

} 

public KeywordThis(String s, int a){ 

    this.name = s; 
    this.age = a; 

} 

public KeywordThis(String s){ 

    this.name = s;  
} 

public KeywordThis(int a){ 

    this.age = a; 

} 

public int setAge(int a){ 

    this(a); 
    int b=a; 
    return b; 
} 

public String setName(String s){ 

    this(s); 
    String s1=s; 
    return s; 
} 






public static void main(String args[]){ 

    KeywordThis ob1=new Keyword(); 
    ob1.setAge(20); 
    ob1.setName("sandy"); 

} 


} 

的Java 份額|編輯

+0

什麼變化沒有你使?爲什麼是答案? – 2013-02-28 04:10:18