繁体   English   中英

Java构造函数问题

[英]Java constructor problem

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

它说“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());

   }
}

您的构造函数接受String, String ,但您传递的是String, int, String

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

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

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

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

 public PassTheClass (String xMyName, String xMyEmotion) {
     this(xMyName, 0, xMyEmotion);
 }

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

public PassTheClass (String myName, int myGrade, String myEmotion) {
    this.myName = myName;
    this.myGrade = myGrade;
    this.myEmotion = myEmotion;
}

作为进一步的“风格”改进,不要在字段名称前添加“my”。 每个领域都隐含着“我”的东西; 只是简单地命名,即namegradeemotion


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

您正在调用具有三个参数的构造函数,但您没有声明这样的一个。 要使代码工作,您可以添加如下构造函数:

public PassTheClass (String myName, int myGrade, String myEmotion)
{
    this.myName = myName;
    this.myGrade = myGrade;
    this.myEmotion = myEmotion;
}

或者:

public PassTheClass(String myName, int myGrade, String myEmotion) {
    this(myName, myEmotion);
    this.myGrade = myGrade;
}

或者对于第三种方法,保留上面的第一个构造函数并用这个替换你拥有的2参数构造函数:

public PassTheClass(String myName, String myEmotion) {
    this(myName, 0, myEmotion);
}

第三种方法允许你有一个初始化所有东西的核心构造函数,以及接受某些东西的默认值并将所有内容传递给核心构造函数的各种便利构造函数。 这样可以最大限度地减少复制和粘贴的数量,因为分配只发生在一个地方。

this将实例变量与构造函数参数区分开来,因此您不需要求助于名称的变体。 使用this是绝大多数Java代码使用的标准约定,遵循约定使您的代码更具可读性。

public PassTheClass (String xMyName, String xMyEmotion)你的构造函数需要2个参数,你在这里传递3个参数:

PassTheClass demo = new PassTheClass("Squidward",94,"proud");

编译器说“bleh?”

您可能需要另一个看起来像这样的构造函数:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM