小弟,初学java,程序是<thinking in java>3rd EDITION里的。
//: c06:SprinklerSystem.java
// Composition for code reuse.
// From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002
// www.BruceEckel.com. See copyright notice in CopyRight.txt.
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);是怎么执行的?能否耐着性子给我讲讲:) 好郁闷

解决方案 »

  1.   

    这句后面的不用管他,是bruceeckel自己写的一个类,用来测试程序的,他列出了程序的输出期望值,如果不对的话会有一个日志产生
    具体看他的那个simpletest包下的类
      

  2.   

    这个知道,我想问的是:从System.out.println(sprinklers);进去的执行,它怎么会执行 class SprinklerSystem 里的 String toString() ?(是不是问的太低级了?别鄙视我)谢谢...
      

  3.   

    System.out.println(sprinklers)首先调用的是toString方法,程序中给出的toString方法覆盖了以前的方法,所以执行public String toString() {
        return
          "valve1 = " + valve1 + "\n" +
          "valve2 = " + valve2 + "\n" +
          "valve3 = " + valve3 + "\n" +
          "valve4 = " + valve4 + "\n" +
          "i = " + i + "\n" +
          "f = " + f + "\n" +
          "source = " + source;
      }
    这段代码,我也正在看thinking in java 3th我的qq是174067470,一起交流吧