Java中的构造器

来源:互联网 发布:矩阵的合同是什么 编辑:程序博客网 时间:2024/06/05 19:41

Java中的构造器

Java在使用new创建对象时,会调用其构造器,构造器与方法不同,其没有返回值,且其名字与类名一致,在构造器中,我们可以初始化类的一些fields,这样,当我们创建好对象后,这些对象都有了默认的初始值 。

当我们的类在继承父类的时候,在创建子类对象的时候,首先会调用父类的构造器,实际上,父类的构造器在调用之前,会继续调用Object类的构造器,当Object类的构造器调用完成之后,才调用父类的构造器,依次在调用子类的构造器。这样做的原因是,我们的子类对象的fields的值可能会依赖于父类,因此父类必须将其fields初始化好,一般来说,我们在写子类构造器的时候,无需写

super()

JVM自动帮我们调用父类的默认构造器,但是,当我们不想调用父类的默认构造器的时候,而是想调用其父类带有参数的构造器时,此时,我们需要显示地调用super(arg1,arg2,...),需要注意的是,其调用必须在构造器中首行,其原因也很简单,就是防止我们先调用了子类的构造器。

我们也可以在子类构造器中调用子类的另一个重载的构造器方法,只要使用

this(arg1,arg2,...);

即可,注意,这里的this和在方法中的this不同,方法中的this指的是当前对象,而这里的this指的是指向同一个类中,不同参数列表的另外一个构造器。

当我们重载自己的构造器的时候,JVM把创建构造器的权利交给我们了,它不会像之前那样帮我们自动创建一个默认的无参构造器。倘若JVM还帮我们创造默认的无参构造器,会出现问题,例如Color类,其没有无参构造器(因为无参构造器没有意义),此时,我们调用new Color()本应该出错,但是由于JVM帮我们创建了默认的无参构造器,故不会出错,这样的情况是不合理的。所以我们应该根据情况决定是否否添加上默认的无参构造器。

当我们编写下列代码时,

Dog d=new Dog();

实际上,我们在构造器的执行体之前,系统会先为该对象分配内存空间,并为这个对象执行默认初始化,此时对象已经产生了,只是这个对象还不能被外部程序访问,只能在该构造器中通过this来引用它。当构造器的执行体结束后,这个对象作为构造器的返回值被返回,通常还会赋给另一个引用类型的变量,从而让外部程序可以访问该对象。

1 0
原创粉丝点击