toString()方法:
因为它是Object里面已经有了的方法,而所有类都是继承Object,所以“所有对象都有这个方法”。
它通常只是为了方便输出,比如System.out.println(xx),括号里面的“xx”如果不是String类型的话,就自动调用xx的toString()方法
惰性初始化:
它用来延迟对象初始化,直到用户真正的使用该对象才会初始化,且只初始化一次。
class Simple {
String s;
public Simple(String si) { s = si; }
public String toString() { return s; }
public void setString(String sNew) { s = sNew; }
}
class Second {
Simple simple;
String s;
public Second(String si) {
s = si; // 'simple' not initialized
}
public void check() {
if(simple == null)
System.out.println("not initialized");
else
System.out.println("initialized");
}
private Simple lazy() {
if(simple == null) {
System.out.println("Creating Simple");
simple = new Simple(s);
}
return simple;
}
public Simple getSimple() { return lazy(); }
public String toString() {
return lazy().toString();
}
public void setSimple(String sNew) {
lazy().setString(sNew);
}
}
public class Testlazy {
public static void main(String args[]) {
Second second = new Second("Init String");
second.check();
System.out.println(second.getSimple());
second.check();
System.out.println(second); // toString() call
second.setSimple("New String");
System.out.println(second);
}
}
结果:
解释:Second second = new Second("Init String"); -----------> simple=null s=Init String
second.check();-----------------> 输出not initialized
System.out.println(second.getSimple());-----------------> 索引到return lazy(),索引到lazy() 输出Creating Simple且创建了simple对象并返回simple对象(Simple类中的s=Init String),调用Simple类中的toString()方法,输出Init String
second.check(); ----------------->输出initialized
System.out.println(second);------------------------>调用Secong类中的toString()方法,调用simple.toString()方法,返回输出Init String
second.setSimple("New String");----------------------->Simple类中的s=New String
System.out.println(second); ----------------->调用Secong类中的toString()方法,调用simple.toString()方法,返回输出New String
Secong类调用lazy()方法使用惰性初始化,lazy()方法生成Simple类对象并返回。