而要设计成一旦提供了有参构造方法,就没有了隐式的无参构造方法。无论什么情况下都有无参构造器岂不是更方便?
定义类的时候如果没有定义任何有参数没参数的构造器,Java以为你忘记了就默认给你定义一个无参数的构造器,一旦出现了你定义的有参数的构造器,Java就把定义构造器的权利交给你了,于是,就没给你定义了默认的无参数的构造器
首先,每个java类都需要至少有一个构造方法,所以对于代码里没有构造方法的,就自动生成一个无参的
如果程序员定义了构造方法,那么就满足每个java类都要至少有一个构造方法的条件了,java编译器就不浪费时间和空间去生成一个程序中不一定用得到的方法了
构造函数的作用——初始化成员变量。
类作者自己写的构造函数,自然是进行了合理的初始化操作。
如果默认都加一个无参的构造函数,外部就可能调用该构造函数,进而生成一个不符合作者预期的对象(成员变量未被合理初始化)。
看下面的这个类:
public class Rect {
private float width;
private float height;
public Rect(float width, float height) {
if (width <= 0 || height <= 0) {
// 参数不合理时抛出异常
throw new IllegalArgumentException(
String.format("Size must > 0. w: %f, h: %f",
width, height));
}
this.width = width;
this.height = height;
}
}
如果存在默认的不带参数的构造函数,那外界就可以通过new Rect()
创建一个违背作者预期的对象。
除了抽象类和接口不能实例化的例外情况,普通java类是有默认无参构造方法的,如果你自定义了有参构造方法,默认的无参构造方法就失效了,必须手动设置无参构造方法,才能有效。