11.2 构造函数

声明实例变量后的下一步是定义构造函数(contructor)——初始化实例变量的特殊方法。构造函数的定义语法与其他方法类似,但:

  • 构造函数与类同名;

  • 构造函数没有返回类型(因此没有返回值);

  • 不使用关键字 static

下面是 Time 类的一个构造函数:

  1. public Time() {
  2. this.hour = 0;
  3. this.minute = 0;
  4. this.second = 0.0;
  5. }

这个构造函数不接受任何实参,其中的每行代码都将一个实例变量初始化为零(就这里而言,这意味着午夜)。

this 是一个关键词,指向正在创建的对象。可像使用对象名一样使用 this。例如,可读写 this 的实例变量,将 this 作为实参传递给方法。然而,this 并不是你声明的,不能给它赋值。

编写构造函数时的常见错误是在末尾添加一条 return 语句。与 void 方法一样,构造函数不返回值。

要想创建 Time 对象,必须使用运算符 new

  1. Time time = new Time();

调用 new 时,Java 将创建指定的对象,并调用构造函数来初始化其实例变量。构造函数执行完毕后,new 将返回一个指向新对象的引用。在这个示例中,引用被赋给了类型为 Time 的变量 time,结果如图 11-1 所示。

11.2 构造函数 - 图1

图 11-1:Time 对象的状态图

初学者有时会犯这样的错误,即在构造函数中调用 new。不必这样做,也不能这样做。在这个示例中,在构造函数中调用 new Time() 将导致无限递归:

  1. public Time() {
  2. new Time(); // 不对!
  3. this.hour = 0;
  4. this.minute = 0;
  5. this.second = 0.0;
  6. }