无参数的构造器

如果在构造器中没有显式地给域赋予初值,那么就会被自动赋为默认值:数值为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(){

}
原文地址:https://www.cnblogs.com/liuzhidao/p/13705838.html