文档

Java™ 教程-Java Tutorials 中文版
为你的类提供构造函数
Trail: Learning the Java Language
Lesson: Classes and Objects
Section: Classes

为你的类提供构造函数

一个类包含构造函数,调用来从类蓝图创建对象。构造函数声明看起来像方法声明,除了它们使用类的名称并且没有返回类型。例如,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 对象。

Previous page: Defining Methods
Next page: Passing Information to a Method or a Constructor