11.2 构造函数
声明实例变量后的下一步是定义构造函数(contructor)——初始化实例变量的特殊方法。构造函数的定义语法与其他方法类似,但:
构造函数与类同名;
构造函数没有返回类型(因此没有返回值);
不使用关键字
static。
下面是 Time 类的一个构造函数:
public Time() {this.hour = 0;this.minute = 0;this.second = 0.0;}
这个构造函数不接受任何实参,其中的每行代码都将一个实例变量初始化为零(就这里而言,这意味着午夜)。
this 是一个关键词,指向正在创建的对象。可像使用对象名一样使用 this。例如,可读写 this 的实例变量,将 this 作为实参传递给方法。然而,this 并不是你声明的,不能给它赋值。
编写构造函数时的常见错误是在末尾添加一条 return 语句。与 void 方法一样,构造函数不返回值。
要想创建 Time 对象,必须使用运算符 new:
Time time = new Time();
调用 new 时,Java 将创建指定的对象,并调用构造函数来初始化其实例变量。构造函数执行完毕后,new 将返回一个指向新对象的引用。在这个示例中,引用被赋给了类型为 Time 的变量 time,结果如图 11-1 所示。

图 11-1:Time 对象的状态图
初学者有时会犯这样的错误,即在构造函数中调用 new。不必这样做,也不能这样做。在这个示例中,在构造函数中调用 new Time() 将导致无限递归:
public Time() {new Time(); // 不对!this.hour = 0;this.minute = 0;this.second = 0.0;}
