48. Java 类和对象 - 构造函数

85 阅读3分钟

48. Java 类和对象 - 构造函数

🚀 Java 构造函数讲解

大家好!今天我们来聊聊 Java 中的构造函数(Constructor)。别紧张,构造函数听起来很正式,但其实它就是帮我们在创建对象的时候顺便初始化一下它的“出生状态”。我们一步步来!


🌟 什么是构造函数?

构造函数的主要作用是:

创建对象并初始化它!

它跟普通方法很像,但有三个显著区别:

  1. 名字必须和类名一样。像个身份证,名字必须对上!
  2. 没有返回类型。不是 void,不是 int,啥都不写!
  3. new 关键字调用,你不会直接调用构造函数,而是通过 new 创建对象时触发它。

📦 语法示例

public class Bicycle {
    public int cadence;
    public int speed;
    public int gear;

    // 带参数的构造函数
    public Bicycle(int startCadence, int startSpeed, int startGear) {
        gear = startGear;
        cadence = startCadence;
        speed = startSpeed;
    }

    // 无参数的构造函数
    public Bicycle() {
        gear = 1;
        cadence = 10;
        speed = 0;
    }
}

🎯 如何使用构造函数?

Bicycle myBike = new Bicycle(30, 0, 8); // 调用带参数的构造函数
Bicycle yourBike = new Bicycle();        // 调用无参数构造函数
  • 带参数的构造函数 会用你传入的值初始化对象,比如 startCadencestartSpeedstartGear
  • 无参数的构造函数 则会使用默认值。

⚡ 构造函数的工作原理

当你写:

Bicycle myBike = new Bicycle(30, 0, 8);

Java 做了两件事:

  1. 分配内存:创建一个 Bicycle 对象。
  2. 调用构造函数:执行带参数的构造函数,把你给的数值赋给对象的字段。

如果你写:

Bicycle yourBike = new Bicycle();

Java 就调用无参数构造函数,使用默认值初始化。

重点: 没有 new,就不会调用构造函数!


🌈 构造函数重载

重载(Overload) 就是你可以写多个构造函数,只要参数不同就行。比如:

public Bicycle() {...}
public Bicycle(int startCadence) {...}
public Bicycle(int startCadence, int startSpeed) {...}

Java 会根据你传的参数来决定调用哪一个。

🎯 注意事项:

  1. 不能只靠返回类型来区分构造函数!因为它没有返回类型!
  2. 如果两个构造函数参数一样,Java 会迷惑然后报错。

🔥 默认构造函数

如果你没写任何构造函数,Java 会自动给你一个“隐形”的无参数构造函数,类似于:

public Bicycle() {}

但如果你写了带参数的构造函数,Java 就不会再自动生成默认构造函数了!所以想要无参数构造函数得自己写!

🎯 重点: 如果你的类继承了别的类,Java 会自动调用父类的无参数构造函数。如果父类没有无参数构造函数,你就得手动调用 super()


🌟 super 关键字调用父类构造函数

当你继承一个类时,子类的构造函数可以用 super(...) 调用父类的构造函数。

public class MountainBike extends Bicycle {
    public MountainBike(int startHeight, int startCadence, int startSpeed, int startGear) {
        super(startCadence, startSpeed, startGear);
    }
}

作用: 确保父类的属性也被初始化!


🎯 构造函数的访问修饰符

构造函数也能用访问修饰符控制谁能创建对象:

  • public:所有类都能访问。
  • private:只能在本类中访问(常用于单例模式)。
  • protected:子类和同包的类可以访问。
  • 默认(包访问权限):同包的类可以访问。

✅ 小结

今天我们学到了:

  1. 构造函数的作用:初始化对象!
  2. 语法特点:
    • 名字和类名一样
    • 没有返回类型
    • new 调用
  3. 构造函数重载:参数不同就可以多个构造函数共存。
  4. 默认构造函数:你不写时,Java 会偷偷帮你写。
  5. super 关键字:继承时调用父类的构造函数。
  6. 访问修饰符:控制谁能创建对象。

构造函数让对象一出生就带着合适的“初始装备”,而不是“裸奔”!希望大家理解啦!🚀