从一个程序开始:
1 class dog 2 { 3 private String name; 4 private String color; 5 private int age; 6 7 dog(String name) 8 //仅给name赋值 9 { 10 this.name=name; 11 } 12 dog(String name,String color) 13 //仅给name,color赋值 14 { 15 this.name=name;//但之前有过类似代码 16 this.color=color; 17 } 18 dog(String name,String color,int age) 19 //仅给name,color,age赋值 20 { 21 this.name=name; 22 this.color=color;//之前有过类似代码 23 this.age=age; 24 } 25 /*以上代码缺点,代码重复, 26 而且如果修改最初定义的参数(如name)时, 27 需要大量修改方法中的参数(3处修改),造成不便*/ 28 } 29 30 class ConstructerDemo 31 { 32 public static void main(String[] args) 33 { 34 35 } 36 }
此时我们可以使用构造方法来调用构造方法(形式为this(实参)),来解决上述问题,改进如下:
1 class dog 2 { 3 private String name; 4 private String color; 5 private int age; 6 7 dog(String name) 8 //仅给name赋值 9 { 10 this.name=name; 11 } 12 dog(String name,String color) 13 //仅给name,color赋值 14 { 15 //this.name=name;//但之前有过类似代码 16 this(name);//改进后 17 this.color=color; 18 } 19 dog(String name,String color,int age) 20 //仅给name,color,age赋值 21 { 22 //this.name=name; 23 //this.color=color;//之前有过类似代码 24 this(name,color);//改进后 25 this.age=age; 26 } 27 /*以上代码缺点,代码重复, 28 而且如果修改最初定义的参数(如name)时, 29 需要大量修改方法中的参数(3处修改),造成不便*/ 30 } 31 32 class ConstructerDemo 33 { 34 public static void main(String[] args) 35 { 36 37 } 38 }
我们要注意的是,对this构造器的调用必须是构造器中的第一个语句。
也就是两点要注意,一是this构造器必须放在构造器中。二是必须为构造器中的第一个语句。