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);
}
}
有帮助的话希望能采纳一下