由于类的构造器方法可以重载,所以可以采用多种形式设置类的实例域的初始状态。确保不管怎样调用构造器,每个实例域都可以被设置为一个有意义的初值。这是一个很好的设计习惯。
可以在类定义中,直接将一个值赋给任何域。例如:
- class Employee
- {
- ....
- private String name = "";
- }
在执行构造器之前,先执行赋值操作。当一个类的所有构造器都希望把相同的值赋予某个特定的实例域时,这种方式特别有用。
初始值不一定是常量。在下面的例子中,可以调用方法对域进行初始化。仔细看一下Employee类,其中每个雇员有一个id域。可以使用下列方式进行初始化:
- class Employee
- {
- ....
- static int assignId()
- {
- int r = nextId;
- nextId++;
- return r;
- }
- ....
- private int id = assignId();
- }
C++注释:在C++中,不能直接初始化实例域。所有的域必须在构造器中设置。但是,有一个特殊的初始化器列表语法,如下所示:
- Employee::Employee(String n, double s, int y, int m, int d) //C++
- : name(n), salary(s), hireDay(y, m, d)
- {
- }
C++使用这种特殊的语法来调用构造器。在Java中没有这种必要,因为对象没有子对象,只有指向其他对象的指针。
转载于:https://blog.51cto.com/mrwucg/1060658