Java中提供了多种编写构造器的机制。
一、重载
有些类有多个构造器,比如说,构造StringBuilder类的一个空的对象可以用以下的方法;
StringBuilder messages=new StringBuilder();
//或者也可指定一个初始的字符串
StringBuilder todoList=new StringBuilder("To do:\n");
这就叫做方法的重载,如果多个方法(比如说StringBulider的构造器方法)有着相同的名字、不同的参数,这就产生了重载。编译器会根据参数类型来寻找最匹配的方法,如果找不到这种方法,就会产生编译错误。编译器寻找匹配方法的过程称为重载解析。
如果完整的对一个方法进行描述,必须有该方法的名称以及相应的参数类型,这个过程叫做方法的签名(Signature)例如,String类有indexOf的公有方法,如果进行签名的话,就是以下几种
indexOf(int)
indexOf(int,int)
indexOf(String)
indexOf(String,int)
二、默认域初始化
如果在构造器中并没有显式的给域赋初值,那么域就会被默认的肤质,比如说将树脂赋值为0,布尔值为false,对象引用为null。
三、无参构造器
在编写构造器时无参数,那么对象在实例化的过程中就会被设置为默认值,以下就是一个无参构造器的编写方法:
public Employee(){
name="";
salary=0;
........
}
如果在编写一个类时没有编写构造器,那么系统就会自己提供一个默认的构造器,将所有实例域设置为默认值。
四、显式域的初始化
可以通过调用方法对域进行初始化。以下:
class Employee{
private int id=assignid();;
private static int nextid;
private static int assignid(){
int r=nextid;
nextid++;
return r;
}
}
五、参数名
在编写很小的构造器时,可以使用这样一种技巧,使用this关键字,this指示隐式参数,也就是所构造的对象。可以选择使用this.的形式来访问实例域,并将其赋值给构造器,示例:
public Employee(String name,double salary){
this.name=name;
}
六、使用初始化块进行初始化数据域
{
id=nextid;
nextid++;
}
调用构造器有如下的顺序
1) 所有数据域被初始化为默认值(0、false、null等)
2)按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块
3)如果调用第二个构造器进行初始化,那么执行第二个构造器主体
4)执行当前构造器主题