本篇介绍下Java中的默认构造器,接上一篇文章。
?
? ? 如前所述,默认构造器(又名“无参”构造器)是没有形式参数的——它的作用是创建一个“默认对象”。如果你写的类没有构造器,则编译器会自动帮你创建一个默认构造器。例如:
class="java" name="code">//: 初始化之默认构造器 class Bird {} public class DefaultConstructor { public static void main(String[] args) { Bird b = new Bird(); // 这里就调用了Bird类的默认构造器 } }
? ? 在上面的例子代码中,表达式new Bird();这一行创建了一个新对象,并调用其默认构造器——即使你没有明确定义它。没有它(构造器)的话,就没有方法可以调用,就无法创建对象。但是,如果已经定义 了一个构造器(无论是否有参数),编译器就不会帮你自动创建默认构造器了:
//: 初始化之默认构造器 class Bird { Bird (int i) {} Bird (double d) {} } public class DefaultConstructor { public static void main(String[] args) { // Bird b = new Bird(); // 这里就调用了Bird类的默认构造器 Bird b = new Bird(1); Bird b = new Bird(1.0); } }
? ?:要是在创建对象的时候使用new Bird();这一句,编译器就会报错;没有找到匹配的构造器。
? ? 这就好比,要是你没有提供任何构造器,编译器会认为“你需要一个构造器,让我给你制造一个吧”;但假如你已写了一个构造器,编译器则会认为“啊,你已经写了一个构造器,所以你知道你在做什么、要做什么;你是刻意省略了默认构造器。”
? ??
?
?