小谈Java构造器

    java构造器的原理相似于c++中的构造函数,是一个特殊的成员函数,是用于创建类实例的一个重要方法。如果一个类要进行对一系列属性的初始化,那么构造函数可以根据函数需要进行编写完成所有变量的初始化,不必一一去初始化。

<1>对其做简单的总结,
它的基本特点是:
  • 构造方法的方法名必须与类名相同。
  • 构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
  • 构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
  • 构造方法不有编程人员调用,而要系统调用,因为构造器主要是被其他方法来调用的用以返回该类的实例,因而设置它为public访问权限,从而允许系统中任何位置的类来创建该类的对象;如果设置为protected,主要用于被其子类的调用;如果是设置为private,阻止其他类创建该类的实例。
  • 构造函数不能直接被调用,必须通过new运算符在创建对象时才会自动调用(即在new的时候就开始执行构造函数里面的的语句);而一般方法是程序执行到它的时候被调用。
  • 既然是一个创建对象的重要途径,那么java类必须包含一个或一个以上(多个)构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认的构造器。这个构造器不执行任何代码。创建对象时系统就会自动调用这个默认的构造函数来创建类的对象。如 
                          Public Class Person
                          {  int age;
                              String name;
                          }
         默认的构造函数是:Public Person()
                               {
                                Person p= new Person();
                                p.name="liyingying";
                                p.age=10;
                               }

  • 构造方法可以重载,以参数的个数,类型,或排列顺序区分。

 <2>类初始化时java 构造函数的执行过程
  •  初始化对象的存储空间为0或者null值;
  •  调用父类的构造函数;
  •  按顺序分别调用类成员变量和实例成员变量的初始化表达式;
 <3>问题:构造器是创建java对象的途径,是不是说构造器是完全负责创建Java对象呢?
      
       创建对象不是完全由构造器负责创建,创建器是创建java对象的重要途径,通过new关键字调用构造器时,构造器确实返回了该类的对象,但这个对象并不是完全由构造器负责创建。实际上,当程序员调用构造器时,系统会先为该对象分配内存空间(可以了解java的内存模型),并为这个对象执行默认的初始化,这个对象已经产生了——这些操作都是在构造器执行之前就完成了。也就是说,当系统开始执行构造器的执行体之前,系统已经创建了一个对象,只是这个对象还不能被外部程序访问,只能在构造器中通过this来引用它。当构造器的执行体执行完后,这个对象作为构造器的返回值被返回,通常还会赋给另一个引用类型的变量,从而让外部程序可以访问该对象。
 
 <4>
构造器的重载

     
         当我们只要一个构造函数时,系统不用区分构造器的类型,但是同一个类中有多个构造函数,多个构造器的形参不同时,我们称为构造器重载。与方法重载基本相似:同一个类中的所有构造器的名字相同,形参列表不同。
         第一种情况是,有多个互不包含的构造函数时,如下代码就是在有两个构造函数时的调用。


    
        第二种情况是:  当有多个构造器,其中一个构造器里面的执行体完全包含另一个执行体。如图
     

         当构造器B中完全包含了构造器A时。可以在方法B中调用方法A,但是构造器不能直接调用,一旦使用new关键字来调用的话,会导致系统重新创建一个对象,为了既能避免这种情况,又能在B中调用A中的初始代码,可以使用this关键字来调用相应的构造器。如下代码:

     
      
       使用this来调用另一个重载器,可以尽量避免代码的重复出现,充分复用每一段代码,既可以让程序代码更加简洁,也可以降低软件的维护成本。

       不当之处,希望得到博友的指正!




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值