这个是THINKING IN JAVA 里的一道题!
程序如下://: reusing/Bath.java
// Constructor initialization with composition.
import static net.mindview.util.Print.*;class Soap {
private String s;
Soap() {
print("Soap()");
s = "Constructed";
}
public String toString() { return s; }
} public class Bath {
private String // Initializing at point of definition:
s1 = "Happy",
s2 = "Happy",
s3, s4;
private Soap castille;
private int i;
private float toy;
public Bath() {
print("Inside Bath()");
s3 = "Joy";
toy = 3.14f;
castille = new Soap();
}
// Instance initialization:
{ i = 47; }
public String toString() {
if(s4 == null) // Delayed initialization:
s4 = "Joy";
return
"s1 = " + s1 + "\n" +
"s2 = " + s2 + "\n" +
"s3 = " + s3 + "\n" +
"s4 = " + s4 + "\n" +
"i = " + i + "\n" +
"toy = " + toy + "\n" +
"castille = " + castille;
}
public static void main(String[] args) {
Bath b = new Bath();
print(b);
}
} /*输出答案是这个
Inside Bath()
Soap()
s1 = Happy
s2 = Happy
s3 = Joy
s4 = Joy
i = 47
toy = 3.14
castille = Constructed
*///:~
问题:程序入口是 首先是构造方法了一个Bath对象,按照构造方法初始化应该是先对成员变量初始化,也就是说先给这些成员变量初始化,
private String
s1 = "Happy",
s2 = "Happy",
s3, s4;
private Soap castille;
private int i;
private float toy;
public Bath()
这里有一个private Soap castille 的构造方法,所以,结果应该是先输出Soap()才对吧,为什么结果是先输出这个 Inside Bath()。
不是先初始化成员变量再构造方法的吗???
程序如下://: reusing/Bath.java
// Constructor initialization with composition.
import static net.mindview.util.Print.*;class Soap {
private String s;
Soap() {
print("Soap()");
s = "Constructed";
}
public String toString() { return s; }
} public class Bath {
private String // Initializing at point of definition:
s1 = "Happy",
s2 = "Happy",
s3, s4;
private Soap castille;
private int i;
private float toy;
public Bath() {
print("Inside Bath()");
s3 = "Joy";
toy = 3.14f;
castille = new Soap();
}
// Instance initialization:
{ i = 47; }
public String toString() {
if(s4 == null) // Delayed initialization:
s4 = "Joy";
return
"s1 = " + s1 + "\n" +
"s2 = " + s2 + "\n" +
"s3 = " + s3 + "\n" +
"s4 = " + s4 + "\n" +
"i = " + i + "\n" +
"toy = " + toy + "\n" +
"castille = " + castille;
}
public static void main(String[] args) {
Bath b = new Bath();
print(b);
}
} /*输出答案是这个
Inside Bath()
Soap()
s1 = Happy
s2 = Happy
s3 = Joy
s4 = Joy
i = 47
toy = 3.14
castille = Constructed
*///:~
问题:程序入口是 首先是构造方法了一个Bath对象,按照构造方法初始化应该是先对成员变量初始化,也就是说先给这些成员变量初始化,
private String
s1 = "Happy",
s2 = "Happy",
s3, s4;
private Soap castille;
private int i;
private float toy;
public Bath()
这里有一个private Soap castille 的构造方法,所以,结果应该是先输出Soap()才对吧,为什么结果是先输出这个 Inside Bath()。
不是先初始化成员变量再构造方法的吗???
楼主【xujiaxiang】截止到2008-07-15 21:17:44的历史汇总数据(不包括此帖):
发帖的总数量:1 发帖的总分数:20 每贴平均分数:20
回帖的总数量:4 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:1 结贴的总分数:20
无满意结贴数:0 无满意结贴分:0
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:0.00 % 无满意结分率:0.00 %
敬礼!
public class A()
{
public A()
{
System.out.prinln("调用了构造方法");
}
}public static void main(Strig[] args)
{
private A a;//这句话不会打印出“调用了构造方法这句话”,也就是不会调用构造方法
private A a=new A();//这样写才会调用构造方法
}
终于明白了!!太感谢了!!