Java构造器是类中用于创建对象并初始化对象属性的特殊方法,它在对象被实例化时自动执行,是面向对象编程中对象初始化的核心组成部分。

构造器的基本定义
构造器的名称必须和所在类的名称完全一致,并且没有返回值类型,连void都不能写。它的主要作用是在创建对象时,为对象的成员变量赋初始值,完成对象的初始化工作。
和普通方法不同,构造器不能被直接调用,只能在创建对象的时候通过new关键字触发执行。下面是一个简单的构造器示例:
public class Student {
// 成员变量
private String name;
private int age;
// 自定义构造器
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
默认构造器
如果一个类中没有手动定义任何构造器,Java编译器会自动为这个类添加一个无参数的默认构造器,这个默认构造器的方法体为空,不做任何初始化操作。
但是一旦我们在类中手动定义了构造器,编译器就不会再自动生成默认构造器了。比如上面的Student类定义了带参数的构造器之后,就不能再用new Student()的方式创建对象,除非我们手动添加一个无参构造器。
构造器的重载
和普通方法一样,构造器也支持重载,也就是在同一个类中定义多个名称相同但参数列表不同的构造器。参数列表不同可以是参数的数量不同、参数的类型不同,或者参数的顺序不同。
构造器重载的好处是可以让用户在创建对象时,根据不同的场景选择不同的初始化方式。示例如下:
public class Student {
private String name;
private int age;
// 无参构造器
public Student() {
this.name = "未知";
this.age = 0;
}
// 只初始化姓名的构造器
public Student(String name) {
this.name = name;
this.age = 0;
}
// 初始化姓名和年龄的构造器
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
this关键字在构造器中的使用
在构造器中,this关键字有两个常见的用法。第一个是用来区分成员变量和局部变量,当构造器的参数名称和成员变量名称相同时,用this.成员变量名来指代当前对象的成员变量,避免赋值错误。
第二个用法是在一个构造器中调用同一个类的其他构造器,语法是this(参数列表),这种调用必须放在构造器的第一行。示例如下:
public class Student {
private String name;
private int age;
public Student() {
// 调用带两个参数的构造器,完成初始化
this("未知", 0);
}
public Student(String name) {
// 调用带两个参数的构造器,年龄默认设为0
this(name, 0);
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
构造器的注意事项
- 构造器的名称必须和类名完全一致,包括大小写也要匹配。
- 构造器没有返回值,也不能写void,否则会被编译器识别为普通方法。
- 构造器不能被static、final、abstract等修饰符修饰。
- 构造器不能直接通过对象调用,只能通过new关键字触发执行。
- 如果一个类继承了其他类,在子类的构造器中会默认先调用父类的无参构造器,如果父类没有无参构造器,需要手动用super关键字调用父类的对应构造器。
构造器的使用示例
下面通过一个完整的示例展示构造器的实际使用过程:
public class Test {
public static void main(String[] args) {
// 调用无参构造器创建对象
Student s1 = new Student();
System.out.println("姓名:" + s1.name + ",年龄:" + s1.age);
// 调用带一个参数的构造器创建对象
Student s2 = new Student("张三");
System.out.println("姓名:" + s2.name + ",年龄:" + s2.age);
// 调用带两个参数的构造器创建对象
Student s3 = new Student("李四", 20);
System.out.println("姓名:" + s3.name + ",年龄:" + s3.age);
}
}
class Student {
String name;
int age;
public Student() {
this("未知", 0);
}
public Student(String name) {
this(name, 0);
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
运行上面的代码,会依次输出三个学生的初始化信息,这就是构造器在对象创建过程中发挥的作用。