程序代码如下:
class WaterSource{
private String s;
WaterSource(){
System.out.println("WaterSource()");
s=new String("Constructed");
}
public String toString(){
return s;
}
}
public class SprinklerSystem{
private String value1,value2,value3,value4;
WaterSource source;
int i;
float f;
void print(){
System.out.println("value1= " + value1);
System.out.println("value2= " + value2);
System.out.println("value3= " + value3);
System.out.println("value4= " + value4);
System.out.println("i= " + i);
System.out.println("j= " + f);
System.out.println("source= " + source);
}
public static void main(String[] args){
SprinklerSystem x=new SprinklerSystem();
x.print();
}
}输出结果为:
valve1=null
valve2=null
valve3=null
valve4=null
i=0
f=0.0
source=null我想问的是WaterSource的构造函数为什么没有执行,为什么没有打印“WaterSource()”?
System.out.println("source=" + source);这条语句具体是怎么执行的?

解决方案 »

  1.   

    SprinklerSystem类的成员source 并没有new啊..
    当然不会执行构造函数...所以返回null啊
    WaterSource source;
    改为WaterSource source = new WaterSource();就执行构造函数了
      

  2.   

    这段是<Thinking in JAVA>中的代码啊,有空抄这样的代码,为什么不把上下文好好读一读呢?看过以后自然就明白。
      

  3.   

    你又没有new WaterSource(),没有创建对象,怎么能执行它的构造函数.
    WaterSource source;这句就相当于你 int i;一样,int的默认值是0,而引用的默认值是null,在这里source的值就是null.
      

  4.   

    String 的默认值和引用一样都是null.
      

  5.   

    md ,这个 laji 问题 100 多个人问过了,就不能查查历史?
    我服了,问问题的人能不能勤快一点儿?
      

  6.   

    To Dan1980
    你不要这么说,就是上下问没有看明白才来问的。
    不要说那些没有用的,向dragon525那样解释一下多好,我已经明白一点了。
      

  7.   

    就是!
    你同有实例化,她的构造方法怎么会执行呢?
    WaterSource source = new WaterSource();
    这样就行了!