第三章:面向对象编程
3.2 构造方法与初始化块
3.2.1 构造方法(Constructor)
定义与作用
构造方法是类中用于初始化对象的特殊方法,具有以下特点:
- 方法名必须与类名完全相同
- 没有返回类型(连
void也不能写) - 在创建对象时自动调用
- 可以重载(一个类可以有多个参数不同的构造方法)
默认构造方法
当类中没有显式定义任何构造方法时,Java会提供一个默认的无参构造方法:
public ClassName() {}
如果定义了至少一个构造方法,则不再提供默认构造方法。
构造方法示例
public class Person {
private String name;
private int age;
// 无参构造方法
public Person() {
this.name = "Unknown";
this.age = 0;
}
// 带参构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
3.2.2 初始化块(Initialization Block)
静态初始化块
- 使用
static关键字修饰 - 在类加载时执行,且只执行一次
- 用于初始化静态成员变量
static {
// 静态初始化代码
}
实例初始化块
- 不使用
static关键字 - 每次创建对象时都会执行,在构造方法之前执行
- 用于初始化实例成员变量
{
// 实例初始化代码
}
初始化块示例
public class Example {
static int staticVar;
int instanceVar;
// 静态初始化块
static {
staticVar = 10;
System.out.println("静态初始化块执行");
}
// 实例初始化块
{
instanceVar = 20;
System.out.println("实例初始化块执行");
}
public Example() {
System.out.println("构造方法执行");
}
}
3.2.3 执行顺序
当创建对象时,各种初始化代码的执行顺序为:
- 静态初始化块(只在类加载时执行一次)
- 实例初始化块(每次创建对象都执行)
- 构造方法(每次创建对象都执行)
3.2.4 this关键字在构造方法中的使用
构造方法中可以使用this关键字:
- 调用当前类的其他构造方法(必须放在第一行)
public Person() {
this("Unknown", 0); // 调用另一个构造方法
}
- 区分成员变量和局部变量
public Person(String name, int age) {
this.name = name; // this.name指成员变量
this.age = age; // name指参数
}
3.2.5 最佳实践
- 尽量为类提供显式的构造方法
- 复杂的初始化逻辑可以放在初始化块中
- 避免在构造方法中调用可被重写的方法
- 使用构造方法链(通过this调用其他构造方法)减少代码重复
