构造器是一个特殊的方法,这个特殊的方法用于创建实例时执行初始化。
如果程序员没有为一个类编写构造器,则系统会为该类提供一个默认的构造器。一旦程序员为一个类提供了构造器,系统将不再为该类提供构造器。
提问:构造器是创建JAVA对象的途径,是不是说构造器完全负责创建JAVA对象?
答:不是,当程序员调用构造器时,系统会先为该对象分配内存空间,并未这个对象执行默认初始化,这个对象已经产生了——这些操作在构造器执行之前就都完成了。也就是说,当系统开始执行构造器的执行体之前,系统已经创建了一个对象,只是这个对象还不能被外部程序访问,只能在该构造器中通过this来引用。当构造器的执行体执行结束之后,这个对象作为构造器的返回值被返回,通常还会赋给另一个引用类型的变量,从而让外部程序可以访问该对象。
我们需要限制创建该类的对象,可以把构造器设置成其他访问权限,例如设置成protected,主要是用于被其子类调用;把其设置为private,阻止其他类创建该类的实例。
public class Parent {
String name;
protected Parent(String name){
this.name = name;
}
}
子类Son一定要重写父类的构造方法(利用这点,可以编写责任链)
public class Son extends Parent {
protected Son(String name) {
super(name);
}
}
构造器最大的用处就是在创建对象时执行初始化,系统为这个对象的Field进行默认初始化,把值设为0,false,null;如果想改变值则可以通过构造器来实现
构造器不能直接被调用,构造器必须使用new关键字来调用。为了在构造器B中调用构造器A中的代码初始化,又不会重新创建一个JAVA对象,可以使用this关键字来调用相应的构造器
public class Apple{
public String name;
public String color;
public double weight;
public Apple(){
}
public Apple(String name,String color){
this.name = name;
this.color = color;
}
public Apple(String name,String color,double weight){
this(name,color);
this.weight = weight;
}
}
备注:使用this调用另一个重载的构造器只能用在构造器中,而且必须作为构造器执行体的第一条语句。