首页 > 代码库 > 构造器的深入了解

构造器的深入了解

    有一段时间没有看编程方面的书了,今天复习了一下java方面的知识,发现很多知识之前都了解甚浅,今天就先总结一下关于java构造器方面的知识深入了解。

首先讲一下什么是构造器:

构造器是一个和类名相同但是无返回值的方法,它在一个类中的作用是创建实例时执行初始化,是创建对象的重要途径。注:如果程序员没有为java类提供任何的构造器,系统会自动为这个类提供无参数的构造器,相反,如果有自定义的构造器,系统就不再提供默认的构造器

1  创建实例时执行初始化

创建一个对象时,系统会对这个对象的Field进行默认初始化,把所有的基本类型的Field设为0或false,所有引用类型的Filed设为null,使用构造器可以显示的改变Filed的初始值,,如:

    

public class ConstructorTest{
     public String name;
     public int count;
     public ContructorTest(String name,int count)
     {
          this.name = name;
          this.count = count;
      }

   public static void main(String[] args)
   {
      
       ContructorTest ct = new ContructorTest("book",123333)
       System.out.printIn(ct.name);
       System.out.printIn(ct.count);
   }
}

2 构造器是创建java对象的重要途径,但不是全部途径

实际上,当程序员调用构造器时,系统会先为该对象分配内存空间,并为这个对象执行默认初始化,此时这个对象已经产生了,而且这些操作都是在构造器执行之前就完成了,也就是说在系统执行构造器的执行体之前,系统已经创建了一个对象,只是这个对象还没被外部程序访问,只能在该构造器中通过this来引用

再来说一下构造器的重载问题:

一个类中可以有多个构造器,如果用户希望该类保留无参数的构造器,或者希望有多个初始化过程,则可以为该类提供多个构造器,一个类有多个构造器就形成了构造器的重载,,如:

public class ConstructorTest{
     public String name;
     public int count;
     public ContructorTest()
     {
     }
     public ContructorTest(String name,int count)
     {
          this.name = name;
          this.count = count;
      }

   public static void main(String[] args)
   {
       ContructorTest ct1 = new ContructorTest();
       ContructorTest ct2 = new ContructorTest("book",123333)
       System.out.printIn(ct1.name + "" +ct1.count);
       System.out.printIn(ct2.count + "" +ct2.count);
   }
}
系统通过new调用构造器时,会根据传入的实例列表来决定调用哪个构造器。

当有多个构造器时,其中一个构造器A的执行体可能包含另一个构造器B的执行体B,当存在这种情况时,可在方法A中调用方法B,构造器不能被直接调用,必须使用new关键字来调用,但是在这里如果使用new关键字就会重新创建一个对象,在这种情况下,可以使用this关键字来调用相应的构造器,,如:

public class ConstructorTest{
     public String name;
     public int count;
     public double weight;
     public ContructorTest()
     {
     }
     public ContructorTest(String name,int count)
     {
          this.name = name;
          this.count = count;
      }
     public ContructorTest(String name,int count,double weight)
     {
     
        this(name,count);   //通过this直接调用上一个构造器的初始化代码
        this.weight = weight;
      }
}
注意:使用this调用另一个重载的构造器只能在构造器中使用,而且必须作为构造器执行体的第一条语句




构造器的深入了解