Java构造函数问题

5 java class

我创建了一个类文件和一个测试文件.当我尝试使用构造函数来创建对象时,它将无法编译.

它说"PassTheClassTester.java:5:错误:类PassTheClass中的构造函数PassTheClass不能应用于给定的类型;"

请帮忙.这是我的代码:

    public class PassTheClass
{  
    private String myName = " ";
    private int myGrade;
    private String myEmotion = " ";


    public PassTheClass (String xMyName, String xMyEmotion)
    {myName = xMyName;
    myGrade = 0;
    myEmotion = xMyEmotion;}


    public String getMyName()
    {return myName;}

    public int getMyGrade()
    {return myGrade;}

    public String getMyEmotion()
    {return myEmotion;}


    public void setMyName (String yMyName)
    {myName = yMyName;}

    public void setMyGrade (int yMyGrade)
    {myGrade = yMyGrade;}

    public void setMyEmotion (String yMyEmotion)
    {myEmotion = yMyEmotion;}

}



    public class PassTheClassTester
{  
   public static void main(String[] args)
   {  
      PassTheClass demo = new PassTheClass("Squidward",94,"proud");

        System.out.println(student.getMyName());

   }
}
Run Code Online (Sandbox Code Playgroud)

Boh*_*ian 9

你的构造函数接受String, String,但你正在通过String, int, String.

int参数添加到构造函数,或int从调用中删除.

我的建议是添加一个int参数,即将构造函数更改为:

public PassTheClass (String xMyName, int xMyGrade, String xMyEmotion) {
    myName = xMyName;
    myGrade = xMyGrade;
    myEmotion = xMyEmotion;
}
Run Code Online (Sandbox Code Playgroud)

如果您仍然需要String, String构造函数,请将其更改为调用3-arg,并传入您当前编码的初始值:

 public PassTheClass (String xMyName, String xMyEmotion) {
     this(xMyName, 0, xMyEmotion);
 }
Run Code Online (Sandbox Code Playgroud)

关于用"x"前缀参数以区别于字段名称没有"错误",我从未见过这样的事情.java中的约定是使用与参数相同的名称作为字段名称,并this.在分配时使用,如下所示

public PassTheClass (String myName, int myGrade, String myEmotion) {
    this.myName = myName;
    this.myGrade = myGrade;
    this.myEmotion = myEmotion;
}
Run Code Online (Sandbox Code Playgroud)

作为进一步的"风格"改进,不要在字段名称前添加"my".每个领域都隐含着"我的"东西; 只是他们的名字说白了,即name,gradeemotion.


好的代码就是清晰度:更喜欢避免使用前缀,因为它们只会使代码混乱并降低可读性.