为便于在基于创建对象时向对象传递参数,以及对类的成员变量的初始化。我们会经常为类编写一个或多个特殊的方法---构造方法。
下面我们来看一个例子:
class RectConstrutor {
private double length;
private double width;
double area(){ //一般方法
return length*width;
}
RectConstrutor(double width,double length){ //含参构造方法
this.length=length; //给成员变量赋值
this.width=width;
}
}
public class ComputerRectArea{
public static void main(String[] args) {
//创建对象,并赋值
RectConstrutor rect1=new RectConstrutor(10,20);
RectConstrutor rect2=new RectConstrutor(3,6);
double ar; //声明局部变量
ar=rect1.area();
System.out.println("第一个长方形的面积是"+ar);
ar=rect2.area();
System.out.println("第一个长方形的面积是"+ar);
}
}
输出结果为:
第一个长方形的面积是200.0
第一个长方形的面积是18.0
总结起来,构造方法有以下几个特点:
1、每个类都有一个默认的构造方法 ,它既无参数也无返回值,起作用是初始化对象,但是我们看不到默认的构造方法。
2、一旦编写了构造方法,默认的构造方法将被覆盖。
class ConsturtorTest{
int x;
public ConstructorTest(int y){
x=y;
}
public static void main(String[] args) {
ConstructorTest t=new ConstructorTest(); //非法,默认的构造方法已不存在
System.out.println(t.x);
}
}
排除这个错误是增加一个无参构造方法:
public ConstructorTest(){}
或者在创建对象时使用带参数的构造方法,
ConstructorTest t=new ConstructorTest(66);
3、构造方法仅在使用new时执行一次,而且一般不能通过“对象名.方法名”来调用。
4、构造方法 同样可以重载,使用new创建对象时,可以通过不同参数调用不同的构造方法。
6、构造方法的方法名必须与类名完全相同,且返回值为空,不能返回任何值。
7、构造方法不能被static、final、abstract、synchronized和native等修饰符修饰,并且带参数的构造方法不能被子类继承。