package reusing;
class WaterSource {
private String s;
WaterSource() {
System.out.println("WaterSource()");
s = "Constructed";
}
public String toString() {
// return getClass().getName() + "@" + Integer.toHexString(hashCode());
return s;
}
}
public class SprinklerSystem {
private String valve1, valve2, valve3, valve4;
private WaterSource source = new WaterSource();
private int i;
private float f;
public String x(){
return "source = " + source;
}
public String toString() {
return
"valve1 = " + valve1 + " " +
"valve2 = " + valve2 + " " +
"valve3 = " + valve3 + " " +
"valve4 = " + valve4 + "\n" +
"i = " + i + " " + "f = " + f + " "
+ "source = " + source;
}
public static void main(String[] args) {
WaterSource ss=new WaterSource();
// SprinklerSystem sprinklers = new SprinklerSystem();
System.out.println(ss);
}
}
解析:
println(引用)对象:编译器调用println方法(
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
println方法调用valueOf方法,(空引用则返回null)返回对象的toString方法,并调用print方法打印
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString(); }
若无类中无重写toString方法则调用默认方法
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());}
* 若重写toString方法则打印方法的返回
若print打印的是对象(引用),调用valueOf方法(空引用则返回null)返回对象的toString方法,并打印
public void print(Object obj) {
write(String.valueOf(obj));
}
/**Output:
WaterSource()
valve1 = null valve2 = null valve3 = null valve4 = null
i = 0 f = 0.0 source = Constructed
a
WaterSource()
Constructed
*
*/