1

我有一个语法错误,我不知道如何修复它。代码对我来说似乎是正确的,但 Eclipse 告诉我“构造函数调用必须是构造函数中的第一条语句”在方法setName()setAge()

 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[] ){








    }


}
4

4 回答 4

5

您不能从实例方法中调用这样的构造函数。您希望您的 setter 更改已有对象的值,而不是创建新对象。我认为你的意思是这样做:

public void setAge(int a){

    this.age = a;
}

public void setName(String s){

    this.name = s;
}

另请注意,您的设置器通常不返回值,因此我已将它们更改为返回类型 void。

于 2012-07-22T23:38:11.933 回答
1

创建对象后,您不能手动调用构造函数。构造函数只能在另一个构造函数内部调用。

正如其他人指出的那样,它应该是:

public void setAge(int a) {
    this.a = a;
}
于 2012-07-22T23:38:41.350 回答
0

请注意,您的二传手应该看起来像

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

而不是构造一个新对象。如果你不这样做,你就打破了一个普遍存在的 Java 约定。

假设您想在 setter 中创建一个新实例,您可以执行类似的操作

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

并且不使用this(a). 尝试使用this只能在构造函数中完成(为同一个类调用另一个构造函数)。

于 2012-07-22T23:37:56.383 回答
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共享|编辑

于 2013-02-28T03:50:44.907 回答