java程序结果问题

public class Test {
public Test(){
System.out.println(“构造方法一被调用了”);
}
public Test(int x){
this();
System.out.println(“构造方法二被调用了”);
}
public Test(boolean b){
this(1);
System.out.println(“构造方法三被调用了”);
}
public static void main(String[] args){
Test test = new Test(true);
}
}

我感觉这个代码执行结果应该是构造方法三被调用,为什么我用idea运行的结果是构造方法一调用,构造方法二被调用,构造方法三被调用
Test test=nee Test(true)他这个参数是布尔类型的,应该直接调用形参是布尔类型的,应该打印构造方法三被调用

首先你执行Test test = new Test(true);
会调用boolean参数的构造器

public Test(boolean b){
this(1);
System.out.println(“构造方法三被调用了”);
}

但是该构造器中你调用了this(1);这个会调用本类中的int参数的构造器

public Test(int x){
this();
System.out.println(“构造方法二被调用了”);
}

而int类型构造器中又有this(),则会调用本类中的无参构造器

public Test(){
System.out.println(“构造方法一被调用了”);
}

所以最后的输出结果是

构造方法一被调用了
构造方法二被调用了
构造方法三被调用了

this()会调用本类中的无参构造器,这是问题原因

不知道你为什么要写这些this
去掉就OK了

public class Test {
  public Test() {
    System.out.println("构造方法一被调用了");
  }

  public Test(int x) {
    System.out.println("构造方法二被调用了");
  }

  public Test(boolean b) {
    System.out.println("构造方法三被调用了");
  }

  public static void main(String[] args) {
    Test test = new Test(true);
  }
}

img

有帮助的话希望能采纳一下