构造器是一个特殊的方法,这个特殊的方法用于创建实例时执行初始化。

 

如果程序员没有为一个类编写构造器,则系统会为该类提供一个默认的构造器。一旦程序员为一个类提供了构造器,系统将不再为该类提供构造器。

 

提问:构造器是创建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调用另一个重载的构造器只能用在构造器中,而且必须作为构造器执行体的第一条语句。