我的构造函数没有提供所需的输出

Rup*_*ngh 3 java oop constructor object

    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");


    }
    }
Run Code Online (Sandbox Code Playgroud)

产量

Constructer with no default values
Constructor with 1 default values
Constructer with no default values
Run Code Online (Sandbox Code Playgroud)

这里第一个构造函数应该将输出作为"具有默认值的构造函数",但事实并非如此.我做错了什么?请帮忙.

YCF*_*F_L 5

在构造函数中,您可以使用this关键字在同一个类中调用另一个构造函数.这样做称为显式构造函数调用.


让我们分析一下你的代码,有三个构造函数:

public vipcustomer()//------------------------------------------------(C1)
public vipcustomer(int creditlimit, String emailid)//-----------------(C2)
public vipcustomer(String name, int creditlimit, String emailid)//----(C3)
Run Code Online (Sandbox Code Playgroud)

所以当你使用时:

new vipcustomer();
Run Code Online (Sandbox Code Playgroud)

它调用此构造函数:

public vipcustomer() {
    this("Rupali", 5000, "rupalisingh@gmial.com");
    System.out.println("Constructer with default values");
}
Run Code Online (Sandbox Code Playgroud)

但请注意this("Rupali", 5000, "rupalisingh@gmial.com");它在打印完成C3时调用C3:

Constructor with no default values
Run Code Online (Sandbox Code Playgroud)

为此,第一个输出是:

Constructor with no default values
Run Code Online (Sandbox Code Playgroud)

然后

Constructor with default values  
Run Code Online (Sandbox Code Playgroud)

其他构造函数也是如此.

this()函数根据参数列表调用重载的构造函数.

看看这个 :