必须是第一条语句,因为JVM要求对象在执行任何字段赋值、变量声明或方法调用前,必须由某个构造器完成初始状态设定,否则可能访问未初始化字段或破坏构造顺序。

this 在构造方法链调用中必须作为构造方法体内的第一条语句出现,且只能出现一次。
为什么必须是第一条语句?
Java 规定:构造方法链(即通过 this(...) 调用本类其他构造方法)必须在进入当前构造方法逻辑前,就完成对对象的初始状态设定。JVM 要求在执行任何字段赋值、局部变量声明、条件判断或方法调用之前,先确保对象已由某个构造器完整初始化(哪怕只是委托给别的构造器)。否则,可能访问到未初始化的字段,或破坏构造顺序语义。
常见错误写法
- 在 this(...) 前写了任意代码(如 int x = 1;、System.out.println("hello");、this.name = "a";)→ 编译报错:"call to this must be first statement in constructor"
- 在一个构造方法中多次使用 this(...) → 编译报错:"call to this must be first statement"(第二次调用自然不在第一行)
- 与 super(...) 同时存在 → 编译报错:"call to super must be first statement"(二者互斥,只能选其一)
正确用法示例
以下写法合法:
public class Person {
private String name;
private int age;
public Person() {
this("unknown", 0); // ✅ 第一条语句
}
public Person(String name) {
this(name, 18); // ✅ 第一条语句
}
public Person(String name, int age) {
this.name = name; // ⚠️ 此处才开始自己的初始化
this.age = age;
}
}
补充说明
- this(...) 只能调用本类中定义的其他构造方法,不能调用静态方法或普通实例方法
- 参数类型和数量必须匹配被调用构造方法的签名,编译期严格检查
- 构造链最终必须终止于一个不带 this(...) 的构造方法(它通常会隐式或显式调用 super())










