多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## [无参构造器](https://lingcoder.gitee.io/onjava8/#/book/06-Housekeeping?id=%e6%97%a0%e5%8f%82%e6%9e%84%e9%80%a0%e5%99%a8) 如前文所说,一个无参构造器就是不接收参数的构造器,用来创建一个"默认的对象"。如果你创建一个类,类中没有构造器,那么编译器就会自动为你创建一个无参构造器。例如: ~~~ // housekeeping/DefaultConstructor.java class Bird {} public class DefaultConstructor { public static void main(String[] args) { Bird bird = new Bird(); // 默认的 } } ~~~ 表达式`new Bird()`创建了一个新对象,调用了无参构造器,尽管在**Bird**类中并没有显式的定义无参构造器。试想如果没有构造器,我们如何创建一个对象呢。但是,一旦你显式地定义了构造器(无论有参还是无参),编译器就不会自动为你创建无参构造器。如下: ~~~ // housekeeping/NoSynthesis.java class Bird2 { Bird2(int i) {} Bird2(double d) {} } public class NoSynthesis { public static void main(String[] args) { //- Bird2 b = new Bird2(); // No default Bird2 b2 = new Bird2(1); Bird2 b3 = new Bird2(1.0); } } ~~~ 如果你调用了`new Bird2()`,编译器会提示找不到匹配的构造器。当类中没有构造器时,编译器会说"你一定需要构造器,那么让我为你创建一个吧"。但是如果类中有构造器,编译器会说"你已经写了构造器了,所以肯定知道你在做什么,如果你没有创建默认构造器,说明你本来就不需要"。