构造函数ValueChanger()是未定义的

时间:2017-06-25 17:55:17

标签: java

我是Java的新手并遇到一些问题,对不起,如果这是一个明显的或经常回答的问题,但我已经看过其他10个这类错误并且无法弄清楚我的问题。 我在主要标记的行上遇到错误,说构造函数是未定义的。任何帮助表示赞赏。

public class ValueChanger {

    private static int myInt1;
    private static int myInt2;
    private static int myInt3;
    private static int myIntSum;

    public static void main(String[] args)
    {
        ValueChanger constructor = new ValueChanger(); //error here
        ValueChanger changeValues = new ValueChanger(); //and here
        changeValues.changingValues(myInt1, myInt2, myInt3, myIntSum);
    }

    public ValueChanger(int myInt1, int myInt2, int myInt3, int myIntSum)
    {
        myInt1 = 1;
        myInt2 = 2;
        myInt3 = 3;
        myIntSum = myInt1 + myInt2 + myInt3;
    }

    public int changingValues(int myInt1, int myInt2, int myInt3, int myIntSum)
    {
        myInt1 = myInt2;
        myInt2 = myInt3;
        myInt3 = myInt1;
        myIntSum = myInt1 + myInt2 + myInt3;
        return myIntSum;
    }

}

4 个答案:

答案 0 :(得分:1)

当您显式实现构造函数时,默认构造函数将被删除。 因此,您的构造函数需要四个args,但是当您创建实例时,您无法提供任何参数:

ValueChanger changeValues = new ValueChanger();

您需要为此实现重载构造函数。

作为一个例子:

public ValueChanger()
{
    myInt1 = 0;
    myInt2 = 0;
    myInt3 = 0;
    myIntSum = myInt1 + myInt2 + myInt3;
}

现在您可以将对象实例化为:

ValueChanger changeValues = new ValueChanger();

或者,如果没有实现默认构造函数,则可以在实例化对象时传递值。

像:

ValueChanger constructor = new ValueChanger(3, 4, 4, 11); //add args
ValueChanger changeValues = new ValueChanger(4, 5, 6, 15);

了解overloaded constructor

答案 1 :(得分:1)

仔细阅读:

  1. 如果您没有在类中编写任何构造函数,编译器将提供默认的无参数构造函数。
  2. 如果没有为类显式编写无参构造函数,只要没有参数构造函数构建对象,编译器就不会抱怨。因为编译器允许默认构造函数创建对象,而对象本身就是无参构造函数。
  3. 如果只编写带有参数且不定义无参数构造函数的构造函数,则编译器不提供默认构造函数,在这种情况下,如果尝试使用无参构造函数创建对象,它会在您的类中查找无参数构造函数。在你的情况下不存在。因此,您将收到一条错误消息,指出默认构造函数不可用。 如果你想阻止创建没有任何数据的对象就是这种情况,这是一个很好的方法。
  4. 示例:认为学生对象必须与之关联。为实现此目的,请定义单个参数构造函数,不要定义无参数构造函数。

    您的错误解决方案:添加默认构造函数 -

    public ValueChanger()
    {
    }
    

    有关详细信息,请参阅here

答案 2 :(得分:0)

由于您已经定义了自己的构造函数,因此无法使用默认构造函数(没有任何参数的构造函数)。

您可能还想添加默认构造函数:

public ValueChanger(){

}

或使用ValueChanger valueChanger = new ValueChanger(1,2,3,4);

答案 3 :(得分:-1)

将此添加到您的班级:

public ValueChanger()
{
}