Java的对象构造非常重要,所以Java提供了多种编写构造器的机制。
重载(overloading)
如果多个方法有相同的名字、不同的参数,便产生了重载。
Java允许重载任何方法,而不只是构造器方法。
因此要完整的描述一个方法,需要支出方法名以及参数类型,这叫做方法的签名(signature)
重载解析(overloading resolution):编译器必须挑选出具体执行哪个方法,他通过用各个方法给出的参数类型与特定方法调用所使用的值类型进行匹配来挑选出相应的方法。这个过程。
默认域初始化
如果在构造器中没有显式的给域赋予初值,那么就会自动赋为默认值:数值为0、布尔值为false、对象引用为null。
域与局部变量的不同点,局部变量明确的初始化方法中的局部变量,但是如果没有初始化类中的域,将会被自动初始化为默认值(0、false或null)。
如果在编写一个类时没有编写构造器,
系统就会提供一个无参数的构造器(这个构造器的所有实例域设置为默认值,即数值为0、布尔值为false、对象引用为null)
如果类中提供了至少一个构造器,且没有提供无参数的构造器,则在构造对象是如果没有提供参数就会被视为不合法
e = new Employee(); // 非法
如果真的想采用 new ClassName()方式构造实例,
必须提供一个默认的构造器(即不带参数的构造器)。如果,希望所有域被赋予默认值,可以采用下列各式:
public ClassName()
{
}
显式域初始化
通过重载类的构造器方法,可以采用多种形式设置类的实例域的初始状态。确保不管怎样调用构造器,每个实例域都可以被设置为一个有意义的初值。
可以在类的定义中,直接将一个值赋给任何域。可以在执行构造器之前,先执行赋值操作。
初始值不一定是敞亮,也可以调用方法对域进行初始化。
调用另一个构造器
初始化块
初始化数据域的方法: 在构造器中设置值;第二种在声明中赋值;第三种机制则为初始化块。
在一个类的声明中,可以包含多个代码块。只要构造类的对象,这些块就会执行。