public class Tester {
int var;
Tester(double var) {
this.var = (int)var;
}
Tester(int var) {
this("hello");
}
Tester(String s) {
this();
System.out.print (s);
}
Tester() {
System.out.print("goodbye");
}
public static void main(String[] args) {
Tester t = new Tester(5);
}
}
主要想问问各位为什么输出答案是goodbyehello,而不是hellogoodbye
public class Tester { int var; ①Tester(double var) { this.var = (int)var; } ②Tester(int var) { this("hello");//在这里this表示自己,那么调用带String参数的构造方法③,那么看3 } ③Tester(String s) { this(); //在这里调用无参数的构造方法④,那么输出“goodbye”,由于用的是print,所以无换行 System.out.print (s); //然后自己再输出s,也就是“hello”,所以最终结果是“goodbyehello” } ④Tester() { System.out.print("goodbye"); } public static void main(String[] args) { Tester t = new Tester(5); //实例化对象,调用int参数的构造方法②,那么看2 } }
Tester(String s) {
this();
System.out.print (s);
} 就是因为这里先调用了默认无参的构造函数,输出了goodbye然后再输出s
public class Tester {
int var;
Tester(double var) {
this.var = (int)var;
}
Tester(int var) {
this("hello");
}
Tester(String s) {
this();
System.out.print (s);
}
Tester() {
System.out.print("goodbye");
}
public static void main(String[] args) {
Tester t = new Tester(5);
}
}
//分析:
Tester t = new Tester(5);//首先进入含int型参数的构造方法 Tester(int var) {
然后执行this("hello"); 然后执行含字符串参数的构造方法(Tester(String s) { 接下来) 和 Mushroom0417说法一样的
楼主好可怜入这行
调用顺序问题吧。
怎么看那个:
this();
System.out.print (s);
这里都是先走this()的啊。
this()就相当于无参的,然后打印了“goodbye”,然后System.out.print (s);打印了“Hello”
连起来就是“goodbyeHello”
1 package headfirst.command.simpleremote; 2 3 public class Tester { 4 int var; 5 6 Tester(double var) { 7 this.var = (int) var; 8 } 9 10 // 1. 参数为int 的构造函数 11 Tester(int var) { 12 // 2. 调用参数为 String 的构造函数 13 this("hello"); 14 } 15 16 // 2.参数为 String 的构造函数 17 Tester(String s) { 18 // 3. 先调用不带参数的构造函数 19 this(); 20 // 5. 输出hello 21 System.out.print(s); 22 } 23 24 // 3. 不带参数的构造函数 25 Tester() { 26 // 4. 输出 goodbye 不换行 27 System.out.print("goodbye"); 28 } 29 30 public static void main(String[] args) { 31 // 1. 调用参数为int 的构造函数 32 Tester t = new Tester(5); 33 } 34 }
看看注释吧,this 是用来调用构造函数的,希望对你有帮助。
Tester t = new Tester(5);
----》进入
Tester(int var) { this("hello");}//无输出
this("hello");------》进入
Tester(String s) { //此时s="hello"
this(); ---->调用 Tester() { System.out.print("goodbye"); }//输出“goodbye”无换行
System.out.print (s); //输出“hello”
}
所以结果输出:goodbyehello