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。而不能再使用无参构造方法了。