为啥执行结果是:
"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"
});
}
} ///:~

解决方案 »

  1.   

    System.out.println(sprinklers);
    等价与System.out.println(sprinklers.toString());
      

  2.   

    "valve1 = null",
    "valve2 = null",
    "valve3 = null",
    "valve4 = null",
    "i = 0",
    "f = 0.0",
    是默认初始化的结果
    "source = null"是没有实例化 ,他只是创建了一个"WaterSource"类的引用source因此他就无法调用WaterSource类的构造函数
    如果你把private WaterSource source;改为private WaterSource source=new WaterSource();
    把这些数据类型赋值
    输出结果又会不同
      

  3.   

    monitor.expect(new String[] {"valve1 = null", "valve2 = null",
    "valve3 = null", "valve4 = null", "i = 0","f = 0.0", "source = null"});
    这个是什么?
    好象问题就在这……