🔍 举个例子说明
public class Person {
public Person(String name) {
System.out.println("有参构造:" + name);
}
}
此时你没有写无参构造函数,编译器也不会自动帮你加。
所以下面这样用会直接报错:
Person p = new Person(); // ❌ 报错:找不到合适的构造函数
✅ 如果你还想用无参构造,怎么办?
就要手动写上:
public class Person {
public Person() {
System.out.println("无参构造");
}
public Person(String name) {
System.out.println("有参构造:" + name);
}
}
这样你就可以:
Person p1 = new Person(); // OK
Person p2 = new Person("Tom"); // OK
🧠 原理小补充:为什么编译器只在没有构造函数时才加默认构造?
Java 编译器的逻辑是这样的:
- 如果你没有提供任何构造函数,编译器会自动加一个无参构造函数;
- 如果你写了一个构造函数(哪怕是有参的),它会认为你要“自己掌控构造过程”,所以就不会再默认添加了。
✅ 总结
| 情况 | 编译器是否生成默认无参构造? |
|---|---|
| 类中没有任何构造函数 | ✅ 会生成无参构造 |
| 写了一个有参构造 | ❌ 不会生成,需要你手动写无参构造 |
| 想同时支持有参+无参构造 | ✍️ 你要手动都写上 |

被折叠的 条评论
为什么被折叠?



