Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
一个类包含构造函数,调用来从类蓝图创建对象。构造函数声明看起来像方法声明,除了它们使用类的名称并且没有返回类型。例如,Bicycle
有一个构造函数:
public Bicycle(int startCadence, int startSpeed, int startGear) { gear = startGear; cadence = startCadence; speed = startSpeed; }
要创建名为 myBike
的新 Bicycle
对象,new
运算符会调用构造函数:
Bicycle myBike = new Bicycle(30, 0, 8);
new Bicycle(30, 0, 8)
为对象创建内存空间并初始化其字段。
尽管 Bicycle
只有一个构造函数,但它可以包含其他构造函数,包括一个无参数的构造函数:
public Bicycle() { gear = 1; cadence = 10; speed = 0; }
Bicycle yourBike = new Bicycle();
调用无参构造函数来创建一个名为 yourBike
的新 Bicycle
对象。
这两个构造函数都可以在 Bicycle
中声明,因为它们有不同的参数列表。与方法一样,Java 平台根据列表中参数的数量及其类型区分构造函数。你不能为同一个类编写两个具有相同数量和类型的参数的构造函数,因为平台无法区分它们。这样做会导致编译时错误。
你不必为你的类提供任何构造函数,但是在做这件事时你必须小心。编译器自动为任何没有构造函数的类提供一个无参数的默认构造函数。这个默认构造函数将调用超类的无参构造函数。在这种情况下,如果超类没有无参构造函数,编译器会发出抱怨,因此你必须验证它是否存在。如果你的类没有显式超类,那么它有一个 Object
的隐式超类,它有 一个无参构造函数。
你可以自己使用一个超类的构造函数。本课开始的 MountainBike
类就是这样做的。这将在稍后的接口和继承课程中讨论。
你可以在构造函数的声明中使用访问修饰符来控制哪些其他类可以调用构造函数。
MyClass
构造函数,它就不能直接创建 MyClass
对象。