package rups;
public class vipcustomer{
private String name;
private int creditlimit;
private String emailid;
public vipcustomer(){
this("Rupali", 5000, "rupalisingh@gmial.com");
System.out.println("Constructer with default values");
}
public vipcustomer(int creditlimit, String emailid) {
this("Rups", creditlimit, emailid);
this.creditlimit = creditlimit;
this.emailid = emailid;
System.out.println("Constructor with 1 default values");
}
public vipcustomer(String name, int creditlimit, String emailid) {
this.name = name;
this.creditlimit = creditlimit;
this.emailid = emailid;
System.out.println("Constructer with no default values");
}
public String getName() {
return name;
}
public int getCreditlimit() {
return creditlimit;
}
public String getEmailid() {
return emailid;
}
}
public class Main {
public static void main(String args[]){
new vipcustomer();
new vipcustomer(5000, "sdhoahfsdh");
new vipcustomer("Rups", 7000, "dfksjdfsjdfa");
}
}
输出
Constructer with no default values
Constructor with 1 default values
Constructer with no default values
这里第一个构造函数应该输出" Constructor,默认值为"但事实并非如此。我做错了什么?请帮忙。
答案 0 :(得分:5)
在构造函数中,您可以使用this
关键字来调用同一个类中的另一个构造函数。这样做称为显式构造函数调用。
让我们分析您的代码,有三个构造函数:
public vipcustomer()//------------------------------------------------(C1)
public vipcustomer(int creditlimit, String emailid)//-----------------(C2)
public vipcustomer(String name, int creditlimit, String emailid)//----(C3)
所以当你使用:
new vipcustomer();
它调用这个构造函数:
public vipcustomer() {
this("Rupali", 5000, "rupalisingh@gmial.com");
System.out.println("Constructer with default values");
}
但请注意this("Rupali", 5000, "rupalisingh@gmial.com");
当C3
完成打印时调用C3
:
Constructor with no default values
表示第一个输出是:
Constructor with no default values
然后
Constructor with default values
其他构造函数也一样。
this()
函数根据参数列表调用重载的构造函数。
看看这个:
答案 1 :(得分:1)
导致输出错误的原因是默认构造函数。
public vipcustomer(){
this("Rupali", 5000, "rupalisingh@gmial.com"); // Will call 3 argument constructor
System.out.println("Constructer with default values");
}
在默认构造函数(无参数构造函数)中,您调用了
this("Rupali", 5000, "rupalisingh@gmial.com");
这意味着它将调用你提供了3个参数的构造函数。
public vipcustomer(String name, int creditlimit, String emailid) {...}
此关键字
this
关键字有2个含义。在构造函数中,this(...)
(与方法调用一样)充当构造函数的调用。编译器根据提供的构造函数的数字参数和参数类型决定调用哪个构造函数。
在其他情况下,this
关键字用作参考。