4:构建器

构建器是初始化类的一种方法,要求是与类名称一致。

  eg:

 1 class Example{
 2     Example(int i){
 3         System.out.println(i);
 4     }
 5 }
 6 public class mail{
 7     public static void  main(String[] strs){
 8         for(int i=0;i<5;i++){
 9             new Example(i);
10         }
11     }
12 }

 

 如上,Example(int i)即为Example类的构建器。

  ps:构建器中可以有return,但是不能返回值,仅能用于退出。

 

类过载:

  在一个类中可以使用多个构建器,每个构建器必须拥有其独一无二的自变量类型表,每次仅能调用一个构建器来进行初始化。

  eg:

 1 class Example{
 2     Example(int i){
 3         System.out.println(i);
 4     }
 5     Example(String strs){
 6         System.out.println(strs);
 7     }
 8 }
 9 public class mail{
10     public static void  main(String[] strs){
11          int i=10;
12         new Example(i);
13         String j="abc";
14         new Example(j);
15     }
16 }

 

    如上,Example类中有两个构建器,而main中分别调用了它们。

      ps:调用构建器时格式必须严格符合。

默认构建器:默认的构建器用代码表示即为形如Example(){}的构建器,它的作用仅仅是产生一个新的对象,如果我们也创建了任何构建器的话都会覆盖默认构建器,此时如果调用默认构建起的话便会显示编译失败。

   初始化类的时候,其中任何位置(不包括另外的构造器)的对象均会初始化。

    eg:

关键字:this

 1 class Tag{
 2     Tag(int i){
 3         System.out.println(i);
 4     }
 5 }
 6 public class mail{
 7     Tag T1=new Tag(1);
 8     mail(String j){  //method 1
 9         Tag T3=new Tag(4948);
10         System.out.println(j);
11     }
12     Tag T3=new Tag(3);
13 void print(){
14     }
15     public static void  main(String[] strs){
16         new mail("abc");
17     }
18 }

 

     输出的结果为1  3  2  abc。可以得出在运行构建器中的代码之前初始化了类中的所有对象。

     同时注意到T3倍初始化了两次,类中的初始化最后被构建器中的初始化覆写,不会被输出。

  

 1 class mail{
 2     private int i=50;
 3     mail a(){
 4         i++;
 5         return this;
 6     }
 7 void print(){
 8     System.out.println(i);
 9     }
10     public static void  main(String[] strs){
11         mail a=new mail();
12         a.a().a().a().a().print();
13     }
14 }

 

  方法a()通过this返回当前对象的句柄,可以对同一个对象进行多次操作。

 1 public class mail{
 2     private int i=50;
 3     mail(String j){  //method 1
 4         System.out.println(j);
 5     }
 6     mail(int i,String j){  //method 2
 7         this(j);
 8         System.out.println(this.i);
 9     }
10 void print(){
11     }
12     public static void  main(String[] strs){
13         new mail("abc");
14         new mail(1,"xyz");
15     }
16 }

 

  这里面的this(j)为构建器中调用另一个构建器;this.i为调用类的成员对象,而非构建器中的成员对象。

posted on 2016-09-28 15:24  cramile  阅读(143)  评论(0)    收藏  举报

导航