【读书笔记】java构造器

java构造器(构造函数)

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关键字在构造器中调用相应的构造器
示例代码:
package object;

public class Train {
	
	/*构造函数的重载*/
	public Train(){}
	
	public Train(String type){
		this.type = type;
	}
	
	public Train(String type,String color){
		//this调用相应的构造函数
		this(type);
		this.color = color;
	}
	
	public Train(String type,String color,String longth){
		//this调用相应的构造函数
		this(type, color);
		this.longth = longth;
	}
	
	//属性
	public String type; //种类
	public String color; //颜色
 	public String longth; //长度
 	
 	//测试方法
 	public void trainInfo(Train t){
 		StringBuffer sb = new StringBuffer("这是一列");
 		if(t.longth != null && t.longth.length()>0){
 			sb.append("由"+t.longth+"辆");
 		}
 		if(t.type != null && t.type.length()>0){
 			sb.append(t.type+"组成的");
 		}
 		if(t.color != null && t.color.length()>0){
 			sb.append("颜色是"+t.color+"的");
 		}
 		sb.append("火车");
 		
 		System.out.println(sb.toString());
 	}
 	
 	//主函数
 	public static void main(String[] args) {
		
 		//根据不同的构造函数创建对象
 		Train t1 = new Train();
 		
 		Train t2 = new Train("22B型客车");
 		
 		Train t3 = new Train("25T型客车", "蓝白相间");
 		
 		Train t4 = new Train("25T型客车", "绿色", "16");
 		
 		t1.trainInfo(t1);
 		//这是一列火车
 		t2.trainInfo(t2);
 		//这是一列22B型客车组成的火车
 		t3.trainInfo(t3);
 		//这是一列25T型客车组成的颜色是蓝白相间的火车
 		t4.trainInfo(t4);
 		//这是一列由16辆25T型客车组成的颜色是绿色的火车
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值