java中this(...)调用本类构造方法必须是首条语句,仅限本类非循环调用,不可与super(...)共存,且调用链终点必须显式或隐式调用父类构造器。

在 Java 中,构造方法里用 this(...) 调用本类其他构造方法,本质是让当前对象的初始化过程复用已有逻辑,但必须满足严格规则才能通过编译和运行。
调用必须是构造方法的第一条语句
Java 规定:this(...) 必须出现在构造方法体的第一行,否则编译失败。这是因为对象的初始化状态必须由某个构造器统一接管,不能先执行其他代码再切换初始化路径。
- 合法写法:
this(10);写在第一行 - 非法写法:
System.out.println("hello"); this(10);—— 编译报错:Illegal constructor call
只能调用本类的其他构造方法,不能循环调用
this(...) 只能指向本类中定义的、参数匹配的构造方法,且整个调用链不能形成闭环(比如 A → B → A)。
- 如果构造器 A 调用
this(...)指向构造器 B,那么 B 不能再调用回 A,否则编译器会检测到递归构造并报错 - 编译器会在编译期检查调用链,确保最终有且仅有一个构造器不依赖
this(...)(即“终点构造器”),它负责实际的字段初始化
不能与 super(...) 同时出现
一个构造方法里,this(...) 和 super(...) 互斥。因为两者都表示“委托给另一个构造器来完成初始化”,而 Java 要求每个对象有且仅有一个直接父类构造器被调用(隐式或显式),且必须是第一条语句。
- 没写
this或super时,编译器自动插入super() - 写了
this(...),就表示把初始化委托给本类另一个构造器,那个构造器内部会处理父类调用 - 同时写
this(...)和super(...)是语法错误
调用链最终必须落到无参或显式 super 的构造器上
所有 this(...) 调用最终必须抵达一个不以 this 开头的构造器。这个构造器要么显式调用 super(...),要么隐式调用 super()(即默认父类无参构造)。
- 例如:构造器 A → this(...) → 构造器 B → super("x"),这是合法的
- 但如果所有构造器都只调用
this(...),没有终点,编译器会报错:“Recursive constructor invocation”
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











