# 为您的类提供构造函数

> 原文： [https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html](https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html)

类包含被调用以从类蓝图创建对象的构造函数。构造函数声明看起来像方法声明 - 除了它们使用类的名称并且没有返回类型。例如，`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`课就是这样做的。稍后将在接口和继承课程中对此进行讨论。

您可以在构造函数的声明中使用访问修饰符来控制哪些其他类可以调用构造函数。

* * *

**Note:** If another class cannot call a `MyClass` constructor, it cannot directly create `MyClass` objects.

* * *