困扰我两天的例题,请兄弟们赐教!

hcxy413 2006-11-24 11:28:21
代码如下:
class WaterSourse
{
private String s;
WaterSourse()
{
System.out.println("WaterSourse()");
s=new String("Constructed");
}
public String toString()
{
return s;
}
}

public class SprinklerSystem
{
private String valve1,valve2,valve3,valve4;
private WaterSourse 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);
}
}
能告诉我它的执行过程吗?
...全文
386 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
Pro_Vida 2006-11-26
  • 打赏
  • 举报
回复
加QQ群吧~我刚创建的33190196
aniude 2006-11-26
  • 打赏
  • 举报
回复
不是把?你没有编译器吗?run 下就知道了,要不自己debug一下
hcxy413 2006-11-26
  • 打赏
  • 举报
回复
就等你再来了,交个朋友吧.hcxy413@21cn.com! 呵呵
Pro_Vida 2006-11-26
  • 打赏
  • 举报
回复
呵呵~~hcxy413() 那看来你可以结贴了~
malligator 2006-11-26
  • 打赏
  • 举报
回复
UP

分就不接了:)
hcxy413 2006-11-26
  • 打赏
  • 举报
回复
谢谢兄弟们,谢谢!Pro_Vida() 讲得太好了!
healer_kx 2006-11-25
  • 打赏
  • 举报
回复
困扰了两天你就出10分。。。
hcxy413 2006-11-25
  • 打赏
  • 举报
回复
还有详细点的说法吗?谢谢!
rainer27 2006-11-25
  • 打赏
  • 举报
回复
楼上的楼上写的经典,受教了
数据分析小兵 2006-11-25
  • 打赏
  • 举报
回复
同意楼上的观点
Pro_Vida 2006-11-25
  • 打赏
  • 举报
回复
上面那篇其实是我昨天晚安就写好了的了~但CSDN的论坛在维护不能回帖所以我只能今天发给你了
Pro_Vida 2006-11-25
  • 打赏
  • 举报
回复
从main函数入手~根据内容一步步往下读你就知道是什么意思了
1、SprinklerSystem sprinklers=new SprinklerSystem();创建了个SprinklerSystem()的实例
看SprinklerSystem类中的代码。
2、分析SprinklerSystem,其中除了定义些参数外还有个方法是public String toString(),
定义参数应该很好理解,是吗?(参数中有个private WaterSourse source;和下面内容一起讲解)。
3、现在要搞懂toString()方法的作用,所有的类都是从Object继承而来的,SprinklerSystem因此也继承了toString()方法.public String toString()是重写了继承而来的该方法,toString()方法有什么作用呢?从java提供的帮助文档中得知: 返回该对象的字符串表示。继承而来的toString()方法的字符串是由类名、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。重写只后该类对象的字符串表示就是
"valve1="+valve1+"\n"+
"valve2="+valve2+"\n"+
"valve3="+valve3+"\n"+
"valve4="+valve4+"\n"+
"i="+i+"\n"+
"f="+f+"\n"+
"source="+source;
也就是所,在打印语句中你直接输入对象名他就会打印出上面内容的字符串。
4、搞懂了toString()方法后现在对里面的内容进行分析:前面的部分不说了很容易理解
关键在source="+source;这时调用了source对象,source是WaterSourse类的对象。
5、因此现在又分析WaterSourse中的代码:定义参数s,但没被初始化,因此他的内容为空(null).
6、下一句是“WaterSourse(){...}”语句块,对他进行分析:该语句块是个构造方法,在为类创建类的对象并用new对对象分配空间时自动调用。但在你的代码中只是WaterSourse source;创建了引用而没分配空间,因此构造方法不被调用。对s的赋值语句也被写在构造方法中,但构造方法没被调用所以s值依然为null。假如把private WaterSourse source改为private WaterSourse source= new WaterSourse();那么在分配空间时同时调用该类的构造方法,构造方法中的打印和赋值语句这是被执行。
7、该类的toString()方法我不多说了结合前面对SprinklerSystem类的分析应该能理解。
8、System.out.println(sprinklers),从字面理解就是打印sprinklers对象,其实就是调用sprinklers的toString()方法,和sprinklers.toString()是一个意思。
9、那么现在就又回到了刚才所讲的那些了。

全部代码分析完毕。
不知道你是否能理解,把自己看做是电脑,电脑的运行顺序是什么你就按什么顺序去分析代码。比如电脑从main函数入口,那么你就从main函数作为起点看。
CharonOk 2006-11-25
  • 打赏
  • 举报
回复
SprinklerSystem类中虽然有包含WaterSourse类,但只是定义,并没有实例化,所以上面的WaterSourse类基本没用到!

所以最后的显示如下:
valve1=null
valve2=null
valve3=null
valve4=null
i=0
f=0.0
source=null
mianwo602 2006-11-25
  • 打赏
  • 举报
回复
你自己写了toString 方法把Object的toString 覆盖了,
System.out.println输出一个对象会自动调用toString,
你可以不覆盖,在输出对象,这时调用的是Object的toString,是个对象的地址
action_520_12 2006-11-25
  • 打赏
  • 举报
回复
lz牛X,搞了两天才把自己的真正想法说出来。
reaki 2006-11-25
  • 打赏
  • 举报
回复
当调用System.out.println输出一个类的对象的时候,
系统自动调用该类的toString()方法!

hcxy413 2006-11-25
  • 打赏
  • 举报
回复
其实我真正不明白的是,Sprinklers 并没有调用toString()方法,但是为什么会执行呢?
huangzansong 2006-11-25
  • 打赏
  • 举报
回复
they are all right,you do not give their values by yourself ,you can do follow;
class WaterSourse
{
private String s;
WaterSourse()
{
s=new String("Constructed");
System.out.println("WaterSourse()"+"/n"+s);

}
public String toString()
{
return s;
}
}

public class fds
{
private String valve1,valve2,valve3,valve4;
private WaterSourse source = new WaterSourse();

private int i;
private float f ;
// source = new WaterSourse();
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)
{
fds sprinklers=new fds();
System.out.println(sprinklers);
}
}



***********this is the result*********
WaterSourse()/nConstructed
valve1=null
valve2=null
valve3=null
valve4=null
i=0
f=0.0
source=Constructed
sunny_110119 2006-11-24
  • 打赏
  • 举报
回复
呵呵 我觉的也是的
fp_zacard 2006-11-24
  • 打赏
  • 举报
回复
System.out.println(sprinklers)
//输出toString()的返回字符串,没有人工赋值,所以显示各类型默认值

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧