java中的构造函数重载问题
我正在学习和练习核心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);
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年开始的,您的答案没有添加任何新信息。