主题
  • 默认模式
  • 浅蓝色模式
  • 淡绿色模式
  • 深夜模式

Java 构造函数

Java 构造函数是一种在对象创建时自动调用的特殊方法,主要用于初始化新创建的对象的状态。

在 Java 中,每个类都有它的构造函数,即使用户没有显式定义,Java 编译器也会自动提供一个默认的无参构造函数。构造函数的名称必须与类名完全相同,没有返回类型声明,甚至不需要void关键字,这是它与其他方法的显著区别之一。

构造函数的主要职责是为对象的字段赋予初始值。当使用new关键字创建对象时,构造函数负责设置对象的初始状态,防止出现未初始化的字段或无效的对象状态。

✅ 以下是一个名为MyClass()的 Java 构造函数。它具有与该类相同的名称,并且没有返回类型:

public class MyClass {
    // 构造函数
    public MyClass() {
        // 初始化代码
    }
}

✅ 同样名为MyClass()的函数,但是它有一个返回类型void。因此,他只是普通的 Java 方法不是构造函数:

public class MyClass {
    // 构造函数
    public void MyClass() {
        // 初始化代码
    }
}

Java 构造函数类型

在 Java 中,构造函数主要分为三种类型:默认构造函数、无参构造函数和参数化构造函数

1. 默认构造函数

如果不显式定义任何构造函数,Java 编译器会在编译时自动生成一个无参数的构造函数,称为默认构造函数。该构造函数会将所有未初始化的实例变量设置为其默认值。

✅ 以下是一个默认构造函数的简单实例:

java
复制
class DefaultConstructor {
    int a;
    boolean b;
    public static void main(String[] args) {
        // 使用默认构造函数创建对象
        DefaultConstructor obj = new DefaultConstructor();
        System.out.println("a = " + obj.a);
        System.out.println("b = " + obj.b);
    }
}

执行这个程序后,输出结果:

a = 0
b = false

在上面的程序中,我们并未显式初始化变量ab的值。然而,在创建类的对象后,输出结果显示这两个变量已被自动初始化为特定值。

这是因为 Java 编译器自动生成了一个默认构造函数。该构造函数会在对象创建时执行,将未初始化的实例变量赋予其类型的默认值——例如int类型变量a被初始化为 0boolean 类型变量b被初始化为 false


2. 无参数构造函数

Java 中的构造函数可以接受参数,也可以不接受任何参数。如果构造函数不接受任何参数,则称为 “无参构造函数”。

✅ 以下是一个无参构造函数的简单实例:

java
复制
class Main {
    int i;

    // 无参构造函数
    private Main() {
        i = 5;
        System.out.println("对象已创建,i = " + i);
    }

    public static void main(String[] args) {
        // 调用无参构造函数
        Main obj = new Main();
    }
}

执行这个程序后,输出结果:

Object created and i = 5

在上面的程序中,我们定义了一个名为Main()的无参构造函数。

该构造函数在对象创建时被自动调用,并将实例变量i初始化为 5。当我们在main()方法中使用new关键字创建Main类的对象时,构造函数被触发,输出了初始化后的变量值。

参数化构造函数

与普通方法类似,我们也可以向构造函数传递参数。这种接受参数的构造函数被称为参数化构造函数。

✅ 以下是一个参数化构造函数的简单实例:

java
复制
class Vehicle {
    int wheels;

    // 参数化构造函数
    private Vehicle(int wheels) {
        this.wheels = wheels;
        System.out.println(wheels + " 轮车辆已创建。");
    }

    public static void main(String[] args) {
        // 通过传入参数调用构造函数
        Vehicle v1 = new Vehicle(2);
        Vehicle v2 = new Vehicle(3);
        Vehicle v3 = new Vehicle(4);
    }
}

执行这个程序后,输出结果:

2 wheeler vehicle created.
3 wheeler vehicle created.
4 wheeler vehicle created.

在上面的程序中,我们定义了一个名为Vehicle(int wheels)的参数化构造函数。


Java 构造函数重载

构造函数重载是指在同一个类中,可以定义多个构造函数,这些构造函数具有相同的名称(即类名),但参数列表(参数的类型、数量或顺序)不同。

当创建对象时,Java 编译器会根据传递的参数类型和数量来决定调用哪个构造函数。

✅ 以下是一个构造函数重载的简单实例:

java
复制
class Company {

    String domainName;

    // 没有参数的构造函数
    public Company(){
        this.domainName = "default";
    }

    // 具有单个参数的构造函数
    public Company(String domainName){
        this.domainName = domainName;
    }

    public void getName(){
        System.out.println(this.domainName);
    }

    public static void main(String[] args) {
        // 不带参数调用构造函数
        Company defaultObj = new Company();

        // 使用单个参数调用构造函数
        Company kaiczObj = new Company("(kaicz.com)");
        defaultObj.getName();
        kaiczObj.getName();
    }
}

执行这个程序后,输出结果:

default
(kaicz.com)

在上面的程序中,我们定义了一个名为Company的类,并在其中实现了两个重载的构造函数。

第一个构造函数不接受任何参数,并将实例变量domainName初始化为字符串 "default"。第二个构造函数接受一个字符串参数,并将其赋值给实例变量domainName

main()方法中,我们分别使用这两个构造函数创建了Company类的对象。第一个对象defaultObj使用无参构造函数创建,第二个对象kaiczObj使用带参数的构造函数创建。



评论区 0
发表评论