Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的构造函数重载问题_Java - Fatal编程技术网

java中的构造函数重载问题

java中的构造函数重载问题,java,Java,我正在学习和练习核心java。我理解方法重载的概念。但当我运行下面的程序时,它显示错误为“ 请在下面找到我的代码并提供帮助。我只是在学习 public class Methodover { int x; int y; Methodover(int a, int b) { x=a; y=b; System.out.println("The values assigned are" +x+ "And" +y);

我正在学习和练习核心java。我理解方法重载的概念。但当我运行下面的程序时,它显示错误为“

请在下面找到我的代码并提供帮助。我只是在学习

public class Methodover
{   
    int x;
    int y;

     Methodover(int a, int b)
    {
        x=a;
        y=b;
        System.out.println("The values assigned are" +x+ "And" +y);

    }

    void multiply(Methodover obj)
    {   obj.x = 2;
        obj.y = 2;
        System.out.println("The multiplication result with object passed is" +obj.x*obj.y );

    }
    public static void main(String[] args)
    {
        Methodover m1 = new Methodover(5,6);
        Methodover m2 = new Methodover();
        m2.multiply(m1);

    }

}

您尚未定义无参数(无参数)类中的构造函数,这就是出现错误的原因。默认情况下,类不提供参数构造函数,因为您提供了自己的构造函数,该构造函数包含两个参数,因此无法再使用默认构造函数。请定义一个defult构造函数,或调用现有的构造函数

public class Methodover
{   
    int x;
    int y;

     Methodover() //new no-argument (parameter less) constructor
     {
     } 

     Methodover(int a, int b)
    {
        x=a;
        y=b;
        System.out.println("The values assigned are" +x+ "And" +y);

    }

此类中没有零参数构造函数。每当您编写构造函数时,JVM都不提供默认构造函数

当类中没有任何构造函数时,JVM提供无参数构造函数

从类开始,您有两个参数构造函数,并且您正在调用零参数构造函数

要解决这个问题,还需要编写零参数构造函数

Methodover() {
  //Zero Argument Constructor or No Argument constructor.
}

Methodover(int a, int b) {
    x=a;
    y=b;
    System.out.println("The values assigned are" +x+ "And" +y);
}

这称为构造函数重载。

I如果您使用参数定义自己的构造函数,则使用java

如果不定义默认构造函数,就不能使用默认构造函数(没有参数)

要使用它,您必须手动定义它


这里使用的是m2.的默认构造函数,您还没有定义它

在Methodover类中创建默认构造函数

   Methodover()
   { }
错误是因为您使用两个参数参数化了构造函数

public  Methodover(int a, int b)
{
        x=a;
        y=b;
        System.out.println("The values assigned are" +x+ "And" +y);

}
或者您可以创建如下所示的对象

   Methodover m2 = new Methodover(2,3);
public Methodover()
{

}

在使用构造函数时,始终使用默认构造函数以避免运行时异常。请在代码中定义默认构造函数

 Methodover()
 {
      //initialize default values.
      this(0, 0);
 } 

默认的(零参数)构造函数就像是在法庭上代表你的律师。如果你没有,JVM会为你提供,但是如果你有,默认的就不会存在:-)(我从Java语言和OOP初学者的好书中引用了这个比喻)

默认情况下,在Java中创建的每个自定义类都将具有无参数构造函数

现在,如果定义一个接受参数的构造函数

public  Methodover(int a, int b)
{
        x=a;
        y=b;
        System.out.println("The values assigned are" +x+ "And" +y);

}
不要像下面那样明确定义默认构造函数

   Methodover m2 = new Methodover(2,3);
public Methodover()
{

}
Java将采用这种方法,构建类对象的唯一方法是通过您创建的唯一参数化构造函数

要解决这个问题,请明确定义一个默认构造函数,如其他答案中所述

当您没有明确定义默认构造函数以及其他参数化构造函数时,为什么Java会删除它?


考虑一下,这里我们限制用户在构造对象时为其提供值。如果Java允许默认构造函数,则无法限制用户在创建对象时传递对象的值。

您为默认构造函数创建了对象


Methodover m2=new Methodover();


但是您没有定义默认构造函数。

您只有一个构造函数,它需要两个
int
参数。要像以前那样调用它,您需要添加一个默认构造函数,如
Methodover(){x=0;y=0;}
yes.。这很有效。但我不明白为什么我们需要这样做。当我创建一个带有两个参数的对象时,将调用带有两个参数的构造函数。但是当我创建另一个没有传递任何参数的对象时,不存在非参数化构造函数,然后当它在第二个对象创建行上抛出错误时。concept与constructor重载相同,对吗?你说的是定义一个非参数化的构造函数。但是当我不需要调用这样的构造函数时,为什么我需要声明它呢?因为你正在调用一个构造函数:调用
Methodover m2=new Methodover();
正在调用不带参数的构造函数。Methodover m2=new Methodover();只是创建一个对象,对吗?如果程序中有没有定义任何参数的构造函数,那么只有它才会调用该函数。否则它只会创建该类的对象,对吗?我从方法重载的概念中理解这一点。特定的方法是基于没有传递参数/类型的paramsThanks澄清了这个疑问。现在我非常清楚这一点。我认为构造函数会被调用(在对象创建时)只有当存在一个构造函数时,它才会简单地创建一个对象。我不知道这样一个事实,即每当您尝试创建一个没有在程序中定义任何构造函数的对象时,JVM就会为我们提供一个默认的非参数化构造函数,而无需我们手动定义。因此,对于我们创建自定义类的每个程序,都会有一个非参数化构造函数我需要erised默认构造函数(如果我们没有定义,JVM会自动提供),因为这个线程是从2013年开始的,您的答案没有添加任何新信息。