class WaterSource
{
             private String s;
             WaterSource()
             {
                 System.out.println(" watersource()");
                 s=" constructed";
             }
             public String toString(){return s;}
}
public class SprinklerSystem
{
            private String value1,value2,value3,value4;
            private WaterSource source=new WaterSource();
            private int i;
            private float f;
            public String toString()
           {
             return
                "value1="+value1+" "+
                "value2="+value2+" "+
                "value3="+value3+" "+
                "value4="+value4+"\n "+
                "i="+i+" "+"f="+f+" "+
                "source="+source;
            }
           public static void main(String[] args)
          {
                SprinklerSystem sprinklers=new SprinklerSystem();
                System.out.println(sprinklers);
           }
}这里可能涉及到初始化顺序的问题还不明确
执行结果第一行为WaterSource()   最后一行为source=constructed
小弟不太懂 这之间都发生了什么??

解决方案 »

  1.   

    因为new WaterSource();在toString()方法之前执行
    所以执行System.out.println(" watersource()");
      

  2.   

    1.在SprinklerSystem类的初始化中,
    private WaterSource source=new WaterSource();
    这一行会先于SprinklerSystem类构造器执行而WaterSource类的构造器
    WaterSource()
                 {
                     System.out.println(" watersource()");
                     s=" constructed";
                 }
    又输出了watersource,所以这就是第一行的结果。2.在SprinklerSystem的main方法中,
    System.out.println(sprinklers);
    在打印sprinklers时会去调用
    SprinklerSystem类的toString方法从这个方法中会打印出value...
    最后一行"source="+source;
    打印source这个对象时,
    会调用WaterSource类的toString方法,
    由于这个方法返回
    constructed所以就是你最后一行的结果