如果在构造器中没有显式地给域赋予初值,那么就会被自动赋为默认值:数值为0,布尔值为false,对象引用为null.
这是域与局部变量的主要不同点.必须明确地初始化方法中的局部变量.但是,如果没有初始化类中的域,将会被自动初始化为默认值.
class Employee{ private String name; private double salary; }
例如,假定Employee类没有在构造器中进行初始化,就会默认地将salary域初始化为0,将name域初始化为null.
但是,这并不是一种良好的编程习惯.如果此时调用getName方法,则会得到一个null引用,这不是我们所希望看到的结果.
很多类都包含一个无参数的构造函数,对象由无参数构造函数创建时,状态会设置为适当的默认值.例如,下面是Employee类的无参数构造函数
public Employee(){ name = ""; salary = 0; }
如果在编写一个类时没有编写默认的构造器,那么系统就会提供一个默认无参数构造器.这个构造器将所有实例域设置为默认值.于是,实例域中的数值型数据设置为0,布尔型数据设置为false,所有对象变量设置为null.
如果类中提供了至少一个构造器,但是没有提供无参数的构造器,则在构建对象时如果没有提供参数就会被视为不合法.例如为Employee类提供一个简单的构造器,不提供无参数构造器.
Employee(String n,double s){ name = n; salary = s; }
对于这个类,构造默认的雇员属于不合法,也就是调用
Employee e = new Employee();
将会产生错误.
请记住,仅当类没有提供任何构造器的时候,系统才会提供一个默认的构造器.如果在编写类的时候,给出了一个构造器,哪怕是很简单的,要是想让这个类的用户能够采用如下方式构造实例:
ClassName c = new ClassName();
就必须提供一个默认的构造器(即不带参数的构造器).如果希望所有域被赋予默认值,可以采用下列方式
public ClassName(){ }