5.3类的构造方法
在类中,除成员方法外,还存在一种特殊类型的方法,那就是构造方法。构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的。每当类实例化一个对象时,类都会自动调用构造方法。
构造方法的特点如下:
☑ 构造方法没有返回值。
☑ 构造方法的名称要与本类的名称相同。
注意:
在定义构造方法时,构造方法没有返回值,但这与普通没有返回值的方法不同,普通没有返回值的方法使用public void methodEx()这种形式进行定义,但构造方法并不需要使用void关键字进行修饰。
构造方法的定义语法格式如下:
public Book(){
…… //构造方法体
}
☑ public:构造方法修饰符。
☑ Book:构造方法的名称。
在构造方法中可以为成员变量赋值,这样当实例化一个本类对象时,相应的成员变量也将被初始化。如果类中没有明确定义构造方法,编译器会自动创建一个不带参数的默认构造方法。
注意:
如果在类中定义的构造方法都不是无参的构造方法,那么编译器也不会为类设置一个默认的无参构造方法,当试图调用无参构造方法实例化一个对象时,编译器会报错。所以,只有在类中没有定义任何构造方法时,编译器才会在该类中自动创建一个不带参数的构造方法。
在5.2.6节中介绍过this关键字,了解了this可以调用类的成员变量和成员方法,事实上this还可以调用类中的构造方法,看下面的实例。
【例1】“构造”鸡蛋灌饼
当顾客购买鸡蛋灌饼时,如果要求加两个蛋,店家就给饼加两个蛋;不要求时,店家会默认给饼加一个蛋。创建鸡蛋灌饼类(EggCake类),使用this关键字,在无参构造方法中调用有参构造方法,实现上述加蛋过程。代码如下:
public class EggCake{int eggCount; //鸡蛋灌饼里蛋的个数public EggCake(int eggCount){ //参数为鸡蛋灌饼里蛋的个数的构造方法this.eggCount = eggCount; //将参数eggCount的值付给属性eggCount}public EggCake(){ //无参数构造方法,默认给饼加一个蛋//调用参数为鸡蛋灌饼里蛋的个数的构造方法,并设置鸡蛋灌饼里蛋的个数为1this(1);}public static void main(String[] args){EggCake cake1 = new EggCake();System.out.println("顾客不要求加蛋的数量,饼里会有"+cake1.eggCount+"个蛋。");EggCake cake2 = new EggCake(2);System.out.println("顾客要求加2个蛋,饼里会有"+cake2.eggCount+"个蛋。");}
}
运行结果如下:
顾客不要求加蛋的数量,饼里会有1个蛋。顾客要求加2个蛋,饼里会有2个蛋。
