在 Java 中this()的主要用途是在同一个类的构造函数之间进行调用Constructor Chaining。它允许你在一个构造函数中复用另一个构造函数的初始化逻辑从而避免代码重复。核心规则非常重要必须放在第一行this()调用必须是构造函数中的第一条语句。如果不在第一行编译器会报错。只能用于构造函数不能在普通方法、静态方法或代码块中使用this()。不能与super()共存因为this()和super()都必须放在第一行所以同一个构造函数中不能同时出现这两者。防止循环依赖不能出现 A 调 BB 又调 A 的情况否则会导致编译错误递归构造函数调用。1. 基本用法示例假设你有一个Person类有多个构造函数其中一些参数有默认值。publicclassPerson{privateStringname;privateintage;privateStringcity;// 1. 全参构造函数核心逻辑都在这里publicPerson(Stringname,intage,Stringcity){this.namename;this.ageage;this.citycity;System.out.println(全参构造函数被调用);}// 2. 双参构造函数城市默认为 Unknown// 使用 this() 调用上面的全参构造函数publicPerson(Stringname,intage){this(name,age,Unknown);// ✅ 必须放在第一行System.out.println(双参构造函数被调用);}// 3. 无参构造函数所有值默认// 使用 this() 调用双参构造函数进而调用全参构造函数publicPerson(){this(Unnamed,0);// ✅ 必须放在第一行System.out.println(无参构造函数被调用);}publicvoidshowInfo(){System.out.println(name, age, city);}publicstaticvoidmain(String[]args){System.out.println(--- 创建对象 1 (无参) ---);Personp1newPerson();// 执行顺序: 无参 - 双参 - 全参System.out.println(\n--- 创建对象 2 (双参) ---);Personp2newPerson(Alice,25);// 执行顺序: 双参 - 全参System.out.println(\n--- 创建对象 3 (全参) ---);Personp3newPerson(Bob,30,Beijing);// 执行顺序: 全参}}输出结果分析当你执行new Person()时进入无参构造。遇到this(Unnamed, 0)暂停无参构造跳转到双参构造。进入双参构造遇到this(name, age, Unknown)暂停双参构造跳转到全参构造。执行全参构造的代码赋值、打印。全参构造结束返回双参构造继续执行双参构造剩下的代码打印。双参构造结束返回无参构造继续执行无参构造剩下的代码打印。最终输出顺序--- 创建对象 1 (无参) --- 全参构造函数被调用 双参构造函数被调用 无参构造函数被调用 ...2. 常见错误示范错误 1this()不是第一行publicPerson(Stringname){System.out.println(开始初始化);this(name,18);// ❌ 编译错误Call to this must be first statement in constructor}错误 2this()和super()同时出现publicclassChildextendsParent{publicChild(){super();// 调用父类构造this(10);// ❌ 编译错误Call to this must be first statement in constructor// 即使把 this 放第一行super 也会报错因为它们争抢“第一行”的位置}}解决方法通常让其中一个构造函数去调用super()另一个构造函数通过this()调用那个构造函数。3.this()vsthis的区别很多初学者容易混淆this()和this特性this()this含义调用同一个类的另一个构造函数引用当前对象本身位置必须在构造函数的第一行可以用在实例方法或构造函数的任何地方用途代码复用减少重复初始化逻辑1. 区分成员变量和局部变量 (this.name name)2. 作为参数传递当前对象3. 返回当前对象 (return this)示例this(10, A);this.name name;4. 实际应用场景构建器模式Builder Pattern的简化版虽然复杂的构建器模式通常使用静态内部类但在简单的 POJOPlain Old Java Object中利用this()可以方便地提供多种构造方式publicclassConfig{privateStringhost;privateintport;privatebooleanssl;// 主构造函数publicConfig(Stringhost,intport,booleanssl){this.hosthost;this.portport;this.sslssl;}// 便捷构造默认不开启 SSLpublicConfig(Stringhost,intport){this(host,port,false);// 复用主构造}// 便捷构造本地开发默认配置publicConfig(){this(localhost,8080,false);// 复用双参构造}}总结目的在一个类内部让一个构造函数调用另一个构造函数实现代码复用。铁律必须写在构造函数的第一行。限制不能和super()同时出现在同一个构造函数中。价值当你的类有多个构造函数且初始化逻辑复杂时使用this()可以确保所有初始化逻辑集中在一个地方通常是参数最多的那个构造函数便于维护。