深入构造器

  构造器是一个特殊的方法,这个特殊方法用于创建类的实例。我们新建一个实例对象时,用new 关键字的方式,这是因为java语言通过new 关键字来调用构造器,从而返回该类的实例。构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类通常无法创建对象。但是很多时候,我们用来创建实例的类中并写没有构造器,也可以通过new的方式创建实例。这是因为,如果程序员没有写为一个类编写构造器,系统就会该类提供一个默认的无参的、执行体为空的构造器。不过,一旦程序员为一个类提供了构造器,系统就不再为该类提供构造器。如果,还需要原来的构造器,可以重写一个构造器。通常,建议保留原来的默认构造器。定义构造器的语法格式如下:

        [修饰符]构造器名 (形参列表){

                 //由零到多可条执行性语句组成构造器执行体

         }

        其中,修饰符可以省略,也可以是public、private、protected中一个;构造器名必须和类名相同;形参列表和定义方法形参列表的格式完全相同。不过,构造器不能定义返回值类型声明,也不能使用void定义构造器没有返回值。这是因为构造器是由返回值的,它返回一个类的实例,只不过这构造器的返回值是隐式的。

       前面,我们说如果一个类中不止一个构造器,我们就要重写构造器方法,即构造器的名字相同,但是形参列表不同。系统通过new调用构造器时,根据实参列表判断调用哪个构造器。

      在重写构造器方法时,如果一个构造器中B的执行体中包含了另一个构造器A执行体中全部的执行语句,那么我们一般在B中调用执行器A(这是软件行业的一个规则:不要把相同的代码书写两次以上。因为,如果需要修改这段代码时,这几个方法中都要修改才行。)。但是,构造器不能被直接调用,构造器必须使用new关键字来调用。不过,一旦使用new关键字来调用构造器,就会导致系统重新创建一个对象。为了在B构造器中调用构造器A中的初始代码,又不会重新穿件一个java对象,可以用this关键字来调用相应的的构造器。例如下面这段代码:

   最后一个问题,构造器并不完全负责创建java对象。构造器是创建java对象的重要途径,通过new关键字调用构造器时,构造器也确实返回了该类的实例对象,但这个对象并不完全是由构造器负责创建的。实际上,当程序员调用构造器时,系统会先为该对象分配内存空间,并为这个对象执行默认初始化,这个对象已经产生了——这些都是在系统开始执行构造器的执行体之前就已经完成了。也就是说,在系统开始执行构造器的执行体之前,系统已经产生了一个对象,只是,这个对象还不能被外部程序访问,只能在该构造器中通过this来用用它。当构造器的执行体执行完以后,这个对象作为构造器的返回值返回,通常还会赋给另外一个引用变量,从而让外部程序可以访问该对象。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值