【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关键字在构造器中调用相应的构造器
示例代码:
 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 }
Train.java

 

 
 
 
 
 
 

 

posted @ 2016-08-11 22:38  郑小辉  阅读(535)  评论(0编辑  收藏  举报