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(),对象一出生就有正确完整的初始状态。