java中构造函数,你真的会用吗

82 阅读3分钟

背景

学习函数式编程的时候,用到了创建多种类型的构造函数,以前都是用的lombok注解直接使用,好久没自己写构造函数了,写出来后,有点怀疑还,幸亏是对的,要不就丢人了,但是秉着不确定就是不会的原则,又去查询了下,查完后发现了一些新的小知识,比如构造函数的重载,以下是具体内容,

查询结果

在Java中,构造函数(Constructor)用于初始化新创建的对象。每个类都可以有一个或多个构造函数,并且它们的名字必须与类名相同。构造函数没有返回类型,甚至不能是void。构造函数可以在对象创建时执行一些必要的初始化工作,比如设置初始值、分配资源等。

构造函数的特性

  • 名字必须与类名相同:这是识别构造函数的关键。
  • 没有返回类型:构造函数不返回任何值,因此不允许指定返回类型,连void也不行。
  • 可以有参数:你可以定义带参数的构造函数来接收初始化对象所需的数据。
  • 可以重载:一个类可以有多个构造函数,只要它们的参数列表不同(参数的数量、类型或顺序不同),这就是构造函数的重载。
  • 默认构造函数:如果一个类没有任何构造函数,Java会自动提供一个无参的默认构造函数。但是一旦你定义了至少一个构造函数,Java将不再提供默认构造函数。

构造函数的基本语法

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

    // 带参数的构造函数
    public ClassName(Type param1, Type param2, ...) {
        // 使用参数进行初始化
    }
}

示例

无参构造函数

public class Person {
    private String name;
    private int age;

    // 无参构造函数
    public Person() {
        this.name = "Unknown";
        this.age = 0;
    }

    // 其他方法...
}

带参数的构造函数

public class Person {
    private String name;
    private int age;

    // 带参数的构造函数
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 其他方法...
}

构造函数重载

public class Person {
    private String name;
    private int age;

    // 无参构造函数
    public Person() {
        this("Unknown", 0); // 调用另一个构造函数
    }

    // 带参数的构造函数
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 只接受名字的构造函数
    public Person(String name) {
        this(name, 0); // 调用另一个构造函数
    }

    // 其他方法...
}

使用 this 关键字

this 关键字可以用来引用当前对象的实例变量,也可以用来调用同一个类中的其他构造函数(这称为构造器链)。例如:

public class Person {
    private String name;
    private int age;

    // 无参构造函数
    public Person() {
        this("Unknown", 0); // 调用带两个参数的构造函数
    }

    // 带参数的构造函数
    public Person(String name, int age) {
        this.name = name; // 使用 this 引用实例变量
        this.age = age;
    }

    // 只接受名字的构造函数
    public Person(String name) {
        this(name, 0); // 调用带两个参数的构造函数
    }

    // 其他方法...
}

注意事项

  • 如果你在构造函数中使用 this() 来调用同一个类中的其他构造函数,那么这个调用必须是构造函数体中的第一条语句。
  • 构造函数可以抛出异常,以便处理可能发生的错误情况。

构造函数是Java编程中非常基础和重要的概念,正确地编写构造函数可以帮助确保你的对象在创建时处于一个有效的状态。