本人刚学JAVA,好多问题都不懂,希望各位高手不要嫌我提的问题太白痴,谢谢!
题目是这样的:创建一个简单的类。在第二个类仲,将一个引用定义为第一个类的对象。运用惰性初始化来实例化这个对象。
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 E03_Composition {
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");
}
} ///:~
输出结果是:
not initialized
Creating Simple
Init String
initialized
Init String
我的问题是:第一个类Simple中,s = si是什么意思
各个return语句又是什么意思
能不能详细给我说下程序的执行过程?
------解决方案--------------------
第一个类Simple中,s = si是使用传递参数si为s初始化,否则s为null。
类Simple中toString()是重写了Object中的toString()方法,因此当执行System.out.println(second);时会自动执行toString()方法,并通过return返回自定义的内容s。
类Second的lazy()方法通过return返回一个已经初始化的Simple引用对象。
类Second的toString()方法和Simple的toString性质相同,也是返回自定义内容。只不过这个toString()方法其实返回的是Simple.toString返回出来的自定义内容,Simple是通过lazy()方法返回的对象。
执行过程:
Second second = new Second("Init String"); //自调用构造方法public Second(String si)
second.check();
//调用过程:second.getSimple()->second.lazy()(产生并初始化Simple对象)->Simple类toString()
System.out.println(second.getSimple());
second.check();
//调用过程:second.toString()->lazy()(产生并初始化Simple对象)->Simple类toString()
System.out.println(second);
//调用过程:second.setSimple(String sNew)->second.lazy()(产生并初始化Simple对象)->Simple类setString(String sNew)
second.setSimple("New String");
------解决方案--------------------
第一个类Simple中,public Simple(String si) {
s = si;
}
s = si在类的构造函数中,这个类在初始化中就会调用这个构造函数来初始化这个类,就是给si的值传递给s
=======================================
关于return的含义:
你可以看到有return这个字样的每个方法都要求有个返回值,return表示返回这个值,而且可以看到return后的值都是和方法要求返回的类型是一样的