Java 构造方法

new 创建对象后,要先给成员变量赋初值、做好准备工作,负责这件事的特殊方法就是构造方法:它与类同名、没有返回类型,并在 new 时被自动调用。

构造方法的定义

构造方法三大特征:与类同名、无返回类型(连 void 也不写)、由 new 自动调用

class Student {
    String name;

    Student() {          // 与类同名、无返回类型
        name = "未命名"; // 创建对象时自动初始化
    }
}

默认构造方法与带参构造

类里不写任何构造方法时,编译器会自动提供空的无参构造;一旦定义了带参构造,默认构造不再自动提供。带参构造常用于把参数赋给成员变量,先定义类:

class Student {
    String name;
    int age;

    Student() { }                            // 无参构造(手动补写)
    Student(String name) {                   // 带参构造:完成初始化
        this.name = name;
    }
    Student(String name, int age) {          // 重载:参数列表不同
        this.name = name;
        this.age = age;
    }
}

以下片段需放进 main 方法中运行,验证三种构造都会被 new 自动调用:

Student s1 = new Student();               // 调用默认构造
Student s2 = new Student("李四");          // 调用带参构造
Student s3 = new Student("王五", 18);      // 调用重载双参构造
System.out.println(s1.name + "、" + s2.name + "、" + s3.name);
// 输出:null、李四、王五

this() 调用另一个构造方法

在构造方法第一行写 this(参数),可调用本类的另一个构造方法,避免重复代码:

class Student {
    String name;
    int age;

    Student() {
        this("未命名", 0); // 第一行调用双参构造
    }
    Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class TestThis {
    public static void main(String[] args) {
        Student s = new Student();
        System.out.println(s.name + ":" + s.age); // 输出:未命名:0
    }
}

与普通方法的区别

对比项构造方法普通方法
方法名必须与类同名不与类同名
返回类型无(void 也不写)必须声明
调用时机new 对象时自动调用手动「对象.方法」调用
调用次数每个对象一次可任意多次

构造方法是类的「出生准备」:与类同名、无返回类型、new 时自动执行;配合带参与重载、this(),对象一出生就有正确完整的初始状态。

笔记加载中…