Java中this()调用本类构造器必须首行、唯一、不与super()共存,参数须严格匹配目标构造器签名,调用链须终止于无this()的构造器,推荐以全参构造器为统一入口。
Java 中在构造方法里用 this() 调用本类其他构造器,不是随便写的,它有一套硬性规则,违反任何一条都会编译失败。
哪怕前面只加一个变量声明、一行日志或一个空行,都会报错:“call to this must be first statement”。这不是建议,是编译器强制要求。
this("张三", 25);(单独一行,开头)String tmp = "test"; this("张三", 25);(有前置语句)if (true) { this("张三"); }(不能放在控制结构里)一个构造器里最多出现一个 this(),也不能同时写 super()——二者都争抢首行位置,语法上互斥。
this("默认名") → this("默认名", 0) → 最终某个构造器显式或隐式调用 super()
this("a"); super(); 或 this(); this(123);
传给 this() 的参数,类型、数量、顺序必须和本类中某个构造器完全一致。Java 不做隐式转换,比如 String 不会自动转成 int,int 也不会自动装箱成 Integer。
立即学习“Java免费学习笔记(深入)”;
this(10) 调用 public Person(int age)
this(5) 调用 Person(long id)(int → long)this("10") 尝试调用 Person(int age)
this("Alice", 5, true) 但类中只有 Person(String, int)
所有 this() 调用最终必须落到一个不调用 this() 的构造器上,否则就是死循环。编译器可能不立即报错,但运行时会 StackOverflow。
A() → this("x") → B(String) → this() → 又回到 A()