如果大家还记得设计模式里的建造者模式,那么很容易联想到组合机制,就是将一系列的对象组合在一起,组合成一个功能丰富的类,当然,这些对象包括基本数据类型,也包括引用。来看个例子: 
[java] view plain copy 
class Soap{   
    private String s;   
    Soap(){   
        System.out.println("soap");   
        s = "constructor";   
    }   
    public String toString(){   
        return s;   
    }   
}   
   
public class CompronentTest {   
    private String s1 = "happy",s2="Happy",s3,s4;   
    private Soap castille;   
    private int i;   
    public CompronentTest(){   
        s3 = "joy";   
        castille = new Soap();   
    }   
    {   
        i = 88;   
    }   
    public String toString(){   
        if(s4 == null){   
            s4 = "Joy";   
        }   
            return "s1 = " + s1 + "\n" +   
                   "s2 = " + s2 + "\n" +   
                   "s3 = " + s3 + "\n" +   
                   "s4 = " + s4 + "\n" +   
                   "i = " + i + "\n" +   
                   "castille = " + castille;   
   
    }   
    public static void main(String[] args) {   
        CompronentTest ct = new CompronentTest();   
        System.out.println(ct);   
    }   
}   
该类就是一个普通的组合类,在组合类中我们应该注意这个对象的初始化方式,此处:1、s1和s2采用在声明的地方直接赋值,这样能够保证它们在构造器被调用之前被初始化(详细可见类与对象一中关于类的初始化顺序的介绍)。2、s3在构造器中初始化。3、s4采用的是懒加载(下面会讲)。4、i在非静态初始化块中。此处我们说下toString方法,就是一个将其它对象转为String对象的方法,除了非基本类型的对象,其它都有一个toString方法,这是因为toString方法是Object类的固有方法,在Java中任何类都隐式继承Object类,也就说都隐含toString方法。所以,在上述的例子中,当最后的字符串+ castille对象时,需要将castille对象以字符串的形式表现出来,因此调用了toString()。 
懒加载因为涉及持有对象实例,所以会涉及到懒加载的机制,代码中的: 
if(s4 == null){ 
         s4 = "Joy"; 
} 
就是一种懒加载的机制,这种机制就是解决当所需的对象比较庞大的时候,只有在用 |   
        
 
    
    
    
     
 
 |