为啥执行结果是:
"valve1 = null",
"valve2 = null",
"valve3 = null",
"valve4 = null",
"i = 0",
"f = 0.0",
"source = null"
我没发现程序执行类 SprinklerSystem 的toString()方法。
//: c06:SprinklerSystem.java// Composition for code reuse.import com.bruceeckel.simpletest.*;
class WaterSource {
private String s;
WaterSource() {
System.out.println("WaterSource()");
s = new String("Constructed");
}
public String toString() { return s; }
}public class SprinklerSystem {
private static Test monitor = new Test();
private String valve1, valve2, valve3, valve4;private WaterSource source;
private int i;
private float f;
public String toString() {
return
"valve1 = " + valve1 + "\n" +
"valve2 = " + valve2 + "\n" +
"valve3 = " + valve3 + "\n" +
"valve4 = " + valve4 + "\n" +
"i = " + i + "\n" +
"f = " + f + "\n" +
"source = " + source;
}
public static void main(String[] args) {
SprinklerSystem sprinklers = new SprinklerSystem();
System.out.println(sprinklers);
monitor.expect(new String[] {
"valve1 = null",
"valve2 = null",
"valve3 = null",
"valve4 = null",
"i = 0",
"f = 0.0",
"source = null"
});
}
} ///:~
"valve1 = null",
"valve2 = null",
"valve3 = null",
"valve4 = null",
"i = 0",
"f = 0.0",
"source = null"
我没发现程序执行类 SprinklerSystem 的toString()方法。
//: c06:SprinklerSystem.java// Composition for code reuse.import com.bruceeckel.simpletest.*;
class WaterSource {
private String s;
WaterSource() {
System.out.println("WaterSource()");
s = new String("Constructed");
}
public String toString() { return s; }
}public class SprinklerSystem {
private static Test monitor = new Test();
private String valve1, valve2, valve3, valve4;private WaterSource source;
private int i;
private float f;
public String toString() {
return
"valve1 = " + valve1 + "\n" +
"valve2 = " + valve2 + "\n" +
"valve3 = " + valve3 + "\n" +
"valve4 = " + valve4 + "\n" +
"i = " + i + "\n" +
"f = " + f + "\n" +
"source = " + source;
}
public static void main(String[] args) {
SprinklerSystem sprinklers = new SprinklerSystem();
System.out.println(sprinklers);
monitor.expect(new String[] {
"valve1 = null",
"valve2 = null",
"valve3 = null",
"valve4 = null",
"i = 0",
"f = 0.0",
"source = null"
});
}
} ///:~
等价与System.out.println(sprinklers.toString());
"valve2 = null",
"valve3 = null",
"valve4 = null",
"i = 0",
"f = 0.0",
是默认初始化的结果
"source = null"是没有实例化 ,他只是创建了一个"WaterSource"类的引用source因此他就无法调用WaterSource类的构造函数
如果你把private WaterSource source;改为private WaterSource source=new WaterSource();
把这些数据类型赋值
输出结果又会不同
"valve3 = null", "valve4 = null", "i = 0","f = 0.0", "source = null"});
这个是什么?
好象问题就在这……