java类必须包含一个或一个以上构造器
(系统会提供无参构造器)
public class ConstructorTest
{
public String name;
public int count;
// 提供自定义的构造器,该构造器包含两个参数
public ConstructorTest(String name , int count)
{
// 构造器里的this代表它进行初始化的对象
// 下面两行代码将传入的2个参数赋给this代表对象的name和count实例变量
this.name = name;
this.count = count;
}
public static void main(String[] args)
{
// 使用自定义的构造器来创建对象
ConstructorTest tc = new ConstructorTest("疯狂Java讲义" , 90000);
System.out.println(tc.name);
System.out.println(tc.count);
}
}
一旦自定义构造器,系统就不提供默认构造器了,也就不能使用 new ConstructorTest ()来创造实例,因为该类不再包含无参数的构造器
如果想继续使用无参数的构造器,可以为该类提供过个构造器,就是构造器的重载
因为构造器通常被其他方法调用,返回该类实例,通常设置为public,容许任何类来创建该类的对象。也可以设置成protected,主要用于被其子类调用。设置成private,阻止其他类创建该类实例。
构造器重载
同一个类有多个构造器,构造器形参列表不同,名字相同。和方法重载有点相似。
public class ConstructorOverload
{
public String name;
public int count;
public ConstructorOverload(){
}
public ConstructorOverload(String name , int count)
{
this.name = name;
this.count = count;
}
public static void main(String[] args)
{
ConstructorOverload oc1 = new ConstructorOverload();
ConstructorOverload oc2 = new ConstructorOverload("轻量级Java EE企业应用实战", 300000);
System.out.println(oc1.name + " " + oc1.count);
System.out.println(oc2.name + " " + oc2.count);
}
}
构造器形参列表部分相同:
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调用另一个重载的构造器的初始化代码
this(name , color);
// 下面this引用该构造器正在初始化的Java对象
this.weight = weight;
}
}