java构造器用于创建类的实例,是创建对象的重要途径,因此,java类必须含有一个或一个以上的构造函数
当我们没有为类提供任何构造函数的时候,系统会自动为该类提供一个无参构造函数,当我们为类提供了一个或多个构造函数后,系统就不会自动创建无参构造函数,这时,如果我们要使用无参构造函数,就要自己创建一个。
构造器的一个最大的用处就是在创建对象的时候,给对象的属性显性指定初始值
示例代码:
package object; public class Car { //如果不创建构造函数的话,系统会自动创建一个如下的无参构造函数 //此时,对象属性会赋默认值 public Car (){} //再创建一个带一个参数的构造函数 public Car(String carName){ this.setCarName(carName); } //另一个带一个参数的构造函数 public Car(String carType,String carName){ this.carType = carType; this.carName = carName; } /*上面两个构造器中调用的不一样,一个调用的对外提供的set方法,一个调用的是属性 *在测试页面中,利用所有的构造函数创建的对象,都能输出传入的值, *但是,既然类中的属性被定义为private,那就说明不想被外界直接获取, *以免传入不符合实际的值...所以应该还是加个判断,或者调用对外的set方法比较好。 * */ //定义车的属性 private String carName; private String carType; //对外提供的get/set方法 public String getCarName() { return carName; } public void setCarName(String carName) { this.carName = carName; } public String getCarType() { return carType; } public void setCarType(String carType) { this.carType = carType; } }
package object; public class TestCar { public static void main(String[] args) { //无参 Car car1 = new Car(); //因为在Car中属性的修饰符是private //所以只有通过get/set方法对属性取值赋值 System.out.println(car1.getCarName()); //带一个参数 this.set方法 Car car2 = new Car("野马"); System.out.println(car2.getCarName()); //带两个参数 this.属性 Car car3 = new Car("福特","野马"); System.out.println(car3.getCarType()); System.out.println(car3.getCarName()); } }
构造器的重载:
同一个类中,多个构造器,构造器的形参列表不同,称为构造器重载。可以根据不同的构造器初始化java对象。
可以通过this关键字在构造器中调用相应的构造器
示例代码:
1 package object; 2 3 public class Train { 4 5 /*构造函数的重载*/ 6 public Train(){} 7 8 public Train(String type){ 9 this.type = type; 10 } 11 12 public Train(String type,String color){ 13 //this调用相应的构造函数 14 this(type); 15 this.color = color; 16 } 17 18 public Train(String type,String color,String longth){ 19 //this调用相应的构造函数 20 this(type, color); 21 this.longth = longth; 22 } 23 24 //属性 25 public String type; //种类 26 public String color; //颜色 27 public String longth; //长度 28 29 //测试方法 30 public void trainInfo(Train t){ 31 StringBuffer sb = new StringBuffer("这是一列"); 32 if(t.longth != null && t.longth.length()>0){ 33 sb.append("由"+t.longth+"辆"); 34 } 35 if(t.type != null && t.type.length()>0){ 36 sb.append(t.type+"组成的"); 37 } 38 if(t.color != null && t.color.length()>0){ 39 sb.append("颜色是"+t.color+"的"); 40 } 41 sb.append("火车"); 42 43 System.out.println(sb.toString()); 44 } 45 46 //主函数 47 public static void main(String[] args) { 48 49 //根据不同的构造函数创建对象 50 Train t1 = new Train(); 51 52 Train t2 = new Train("22B型客车"); 53 54 Train t3 = new Train("25T型客车", "蓝白相间"); 55 56 Train t4 = new Train("25T型客车", "绿色", "16"); 57 58 t1.trainInfo(t1); 59 //这是一列火车 60 t2.trainInfo(t2); 61 //这是一列22B型客车组成的火车 62 t3.trainInfo(t3); 63 //这是一列25T型客车组成的颜色是蓝白相间的火车 64 t4.trainInfo(t4); 65 //这是一列由16辆25T型客车组成的颜色是绿色的火车 66 } 67 }