复用代码是Java众多引人注目的功能之一。但要想成为极具革命性的语言,仅仅能够复制代码并对之改变是不够的,它还必须能够做更多的事情。
使用类而不破坏现有程序代码,有两种达到这一目的的方法。
- 第一种方法非常直观:只需在新的类中产生现有类的对象。由于新的类是由现有类的对象所组成,所以这种方法称为组合。该方法只是复用了现有程序代码的功能,而非它的形式。
- 第二种方法则更细致一些,它按照现有类的类型来创建新类。无需改变现有类的形式,采用现有类的形式并在其中添加新代码。这种神奇的方式称为继承,而且编译器可以完成其中大部分工作。
类中域为基本类型时能够自动被初始化为零。但是对象引用会被初始化null,而且如果你试图为它们调用任何方法,都会得到一个异常——运行时错误。很方便的是,在不抛出异常的情况下仍旧可以打印一个null引用。
编译器并不是简单为每一个引用都创建默认对象,这一点是很有意义的,因为若真要那样做的话,就会在许多情况下增加不必要的负担。如果想初始化这些引用,可以在代码中的下列位置进行:
- 在定义对象的地方。这意味着它们总是能够在构造器被调用之前被初始化。
- 在类的构造器中
- 就在正要使用这些对象之前,这种方式称为惰性初始化。在生成对象不值得及不必每次都生成对象的情况下,这种方式可以减少额外的负担。
- 使用实例初始化