Version:1.0 StartHTML:0000000163 EndHTML:0000089416 StartFragment:0000041457 EndFragment:0000089376 SourceURL:file:///Z:/thinking_in_java/java_reveiwv2.docx
4.1 用构造器自动初始化
下面是带有构建器的一个简单的类(若执行这个程序有问题,请参考第3 章的“赋值”小节)。
//: SimpleConstructor.java
// Demonstration of a simple constructor
package c04;
class Rock {
Rock() { // This is the constructor
System.out.println("Creating Rock");
}
}
public class SimpleConstructor {
public static void main(String[] args) {
for(int i = 0; i < 10; i++)
new Rock();
}
} ///:~
现在,一旦创建一个对象:
new Rock();
就会分配相应的存储空间,并调用构建器。这样可保证在我们经手之前,对象得到正确的初始化。
请注意所有方法首字母小写的编码规则并不适用于构建器。这是由于构建器的名字必须与类名完全相同!
和其他任何方法一样,构建器也能使用自变量,以便我们指定对象的具体创建方式。可非常方便地改动上述
例子,以便构建器使用自己的自变量。如下所示:
class Rock {
Rock(int i) {
96
System.out.println(
"Creating Rock number " + i);
}
}
public class SimpleConstructor {
public static void main(String[] args) {
for(int i = 0; i < 10; i++)
new Rock(i);
}
}
利用构建器的自变量,我们可为一个对象的初始化设定相应的参数。举个例子来说,假设类Tree 有一个构建
器,它用一个整数自变量标记树的高度,那么就可以象下面这样创建一个Tree 对象:
tree t = new Tree(12); // 12 英尺高的树
4.2 方法重载/过载(overloading)
由于构建器的名字由类名决定,所以只能有一个
构建器名称。但假若我们想用多种方式创建一个对象呢?例如,假设我们想创建一个类,令其用标准方式进行初始化,另外从文件里读取信息来初始化。此时,我们需要两个构建器,一个没有自变量(默认构建
器),另一个将字串作为自变量——用于初始化对象的那个文件的名字。由于都是构建器,所以它们必须有
相同的名字,亦即类名。所以为了让相同的方法名伴随不同的自变量类型使用,“方法过载”是非常关键的
一项措施。同时,尽管方法过载是构建器必需的,但它亦可应用于其他任何方法,且用法非常方便。
在下面这个例子里,我们向大家同时展示了过载构建器和过载的原始方法:
//: Overloading.java
// Demonstration of both constructor
// and ordinary method overloading.
import java.util.*;
class Tree {
int height;
Tree() {
prt("Planting a seedling");
height = 0;