java基础-初始化与清理-构造器

1.构造器的概念:是一个在创建对象时被自动调用的特殊方法。

2.构造器的作用:在创建对象时,会为对象分配存储空间,并调用相应构造器,确保了在操作对象之前,它已经被恰当的初始化了。

3.构造器的特点:构造器是一个特殊类型的方法,因为它没有返回值。这与返回值为空(void)不同。对于空返回值,尽管方法本身不会返回什么,但仍然可以选择让它返回别的东西。而构造器则不会返回任何东西,别无选择。

4.构造器的命名:构造器的名称必须与类名完全相同。由于类名通常是首字母大写,然后遵循驼峰法则,所以构造器这个特殊方法的首字母也是大写的,所以"每个方法首字母小写"这个编码风格不适用于构造器。

5.构造器的类型:构造器分为默认构造器(无参构造器)和有参构造器。默认构造器是没有参数的,它的作用是创建一个“默认对象”,如果一个类中没有写入任何构造器,那么编译器会自动创建一个默认构造器,来确保创建一个新对象时对其进行初始化。但是,如果类中已经有写入构造器,那么不管构造器是有参还是无参的,编译器都不会再去自动创建一个默认构造器。示例:

java基础-初始化与清理-构造器

输出结果为:

java基础-初始化与清理-构造器

解析:Test1对象中并无任何构造器,在为Test1创建对象时,编译器自动创建了一个默认构造器来确保test1对象在创建时对它 的成员变量进行了初始化。初始化时,基本类型的默认值如下图所示:

java基础-初始化与清理-构造器

另外,String类型的默认值为null。

示例2;定义一个有参构造器,给他传入一个参数,并打印出这个参数

java基础-初始化与清理-构造器

类Test中定义了一个有参构造器,传入一个int类型的参数并打印到控制台,在main方法调用中,Test test1 = new Test()会报错,因为Test中已经定义了一个有参构造,在创建对象时,编译器不会再去自动创建一个无参构造器,所以,只能用这个已经定义好了的有参数的构造器。输出结果为:

java基础-初始化与清理-构造器

6.方法重载与构造器重载:

方法重载:一个类中,定义任一方法名称相同,参数列表不同(参数的类型,个数,顺序)的方法的过程称之为方法重载。方法重载即使用于普通方法,也适用于构造器,因为构造器也算式方法。

***区分方法重载:同一个类中,方法名称相同,参数列表不同的方法都算重载方法。不能以方法的返回值来作为区分方法重载的方式。

***涉及参数为基本类型的方法重载:当重载方法里的参数为基本类型时,如果传入的数据类型(实际参数类型)小于方法中申明的形式参数类型,实际参数类型将会被提升;如果传入的数据类型大于方法中申明的形式参数类型,实际参数类型将进行窄化转换为形式参数类型。示例:

java基础-初始化与清理-构造器

1.当输入常数5时,测试5在以上方法中会被当成什么类型来处理,输出结果为:

java基础-初始化与清理-构造器

可以看到,常数5被当做int值来处理,当重载方法里没有int类型的形式参数方法时,5的类型自动提升为long,float,double;

2,当输出实际参数为char类型时,测试一下其输出结果:

java基础-初始化与清理-构造器

输出结果为:

java基础-初始化与清理-构造器

可以看到对于char来说,如果重载方法里没有char类型的形式参数方法时,就会把char直接提升为int型,如果没有int类型的形式参数方法,则再自动往上提升类型。

3.对于其它基本数值类型来说,和int类型时一样的,如果找不到与当前实际参数类型相符合的形式参数的方法,那么会将实际参数类型一步步提升,以此来进行匹配,直到找到一个合适的方法为止。

 

4.那么反过来,如果实际参数的类型大于重载方法声明的形式参数的类型,那么实际参数的类型会依次窄化转换,来匹配重载方法,例如double类型的实际参数找不到对应的double类型的形式参数时,会依次窄化为float,long,int,short,byte,char类型,然后再去匹配,如果依旧没有匹配上,则会报错。

 

 

以上是方法重载的一些理论,接下来看一下构造器重载。

构造器重载:在类中,可以定义一个默认构造器和多个有参数的构造器。构造器重载的意义是想用多种方式来创建一个对象并对其进行初始化。