2.1.4 类的构造方法

在Java中,任何变量在被使用前都必须先设置初值。在每次创建一个实例时,初始化类中的所有变量是一项枯燥无味的工作。如果在第一次创建对象时就完成所有的设置,这将会使工作更简单。基于这个原因,Java允许在对象创建时就对其进行初始化。这种自动初始化工作是通过使用构造方法来完成的。

构造方法(constructor)在创建对象时就自动运行,它一般用来初始化成员变量。构造方法与它所在的类有同样的名称,在语法上与一般方法类似。构造方法的一般形式如下:

      [修饰符]  方法名([形式参数列表]){
      // 方法体
      }

构造方法是一种特殊的成员方法,它的特殊性反映在如下几个方面:

(1)构造方法名与类名完全相同(包括大小写也一样)。

(2)构造方法不返回任何值,也没有返回类型(连void都没有)。

(3)每一个类可以有零个或多个构造方法,如果没有写构造方法则默认存在一个没有参数的构造方法。

(4)一旦用户定义了自己的构造方法,默认的无参构造方法就不再存在。

(5)构造方法在创建一个类的对象时由系统自动地调用执行,一般不能显式地像使用普通方法一样直接调用。

例2-2】 继续改造长方体类,使对象创建时能自动初始化长方形的尺寸。

定义一个带参构造方法来进行初始化,这个构造方法的功能是将每个长方形的尺寸设置为指定的参数值。请特别注意Rectangle对象是如何被创建的。

            public class Rectangle{
                double length;  // 长
                double width;   // 宽
                // 带参构造方法,用于初始化长方形的长和宽
                public Rectangle(double w, double l){
                    width = w;
                    length = l;
                }
                // 求长方形的面积
                double area(){
                    return length * width;
                }
            }
            public class RectangleDemo{
                public static void main (String args[]){
                    // 调用构造方法初始化每个长方形对象
                    Rectangle rect1 = new Rectangle(10,20);
                    Rectangle rect2 = new Rectangle(3,6);
                    double area;
                    area=rect1.area();  // 调用area()方法得到第一个长方形的面积
                    System.out.println("第一个长方形的面积是:" + area);
                    area=rect2.area();  // 调用area()方法得到第二个长方形的面积
                    System.out.println("第二个长方形的面积是:" + area);
                }
            }

该程序的运行结果如下所示:

            第一个长方形的面积是:200.0
            第二个长方形的面积是:18.0

可以看到,每个对象按其构造方法所指定的参数初始化。例如,在下面的代码行中,

            Rectangle rect1 = new Rectangle(10,20);

当new创建对象时,将自动调用构造方法,那么rect1的width和length属性就将分别被赋值10和20。

在【例2-2】的Rectangle类中存在用户定义的构造方法,此时就只能调用这个用户定义的构造方法Rectangle(double w, double l)来创建Rectangle类的两个对象rect1和rect2。而不能再使用无参构造方法了。