引入–为什么需要构造器
我们在创建对象时,如果不能在创建对象时用某种办法进行属性赋值,那么只能在创建对象后一个一个去给成员变量赋值,当我们需要创建很多个对象时,这种办法显然是非常麻烦的。面对这样的需求,需要构造方法(constructor)也就是构造器来完成。
构造器语法
[访问权限修饰符] 类名(形参列表){
// 构造方法体
}
语法的相关解释如下:
访问权限修饰符: 用来限制构造方法的访问权限,通常使用public。
类名: 类名的位置必须和当前类的类名完全一致(大驼峰命名)。
形参列表: 形参列表就是创建方法时将要传入的数据,按照需要设计形参列表,称为有参构造,也可以为空,称为无参构造。
构造方法体: 构造方法的方法体与类中成员方法类似,都有隐含的this传参,指向当前对象,也可以在构造器中使用this关键字。
构造器作用
构造器用来在创建对象的过程中,给对象中的成员变量赋值。为了更好的理解构造器的作用,要注意以下几点:
- 构造器不是用来创建对象的,创建对象是JVM完成的事情,构造器不过是在创建对象的过程中给对象中的成员变量赋值用的。
- 构造器是一个特殊的方法,它不由程序员直接主动调用,而是在创建对象的过程中,由JVM去调用,完成成员变量的赋值。
- 一个类中可以有多个构造器,其形参列表不同,构成方法的重载。在new创建对象时,需要传入实参列表。只要使用new关键字创建对象,一定会调用类的构造器,具体调用哪个构造器,由实参列表来判断。
- 构造器没有返回值类型,也不需要返回值。
- 使用构造器的赋值一定是准确的。在一次创建对象的过程中,构造器的代码,永远是最后执行的,只要使用构造器赋值,那么最终成员变量的取值一定是传入参数给出的值。但是,构造器赋值的准确性是由标准格式的构造器保证.
标准格式的构造器语法如下:
[访问权限修饰符] 类名(成员变量数据类型 成员变量名, ……){
this.成员变量名 = 成员变量名;
……
}
构造器定义
无参构造
在任何一个类中,如果没有显示直接地提供构造器,那么编译器在编译代码时,会自动加上一个无参构造器,称之为默认无参。
public 类名(){}
如果类中存在任何一个构造器,那么就不会再提供默认无参了。不过在写代码的时候,如果一个类有创建对象的需求,可以手动加上一个默认无参。
有参构造
要想主动使用构造器给成员变量赋值,就需要使用有参构造器,注意使用标准格式的构造器。
注意事项
- 构造器在创建对象过程中是最后执行的,实际上,在构造器执行的时候,对象就已经创建完毕了,执行构造器代码,不过是完成创建对象赋值的收尾工作。
- 构造器的作用就是赋值,最好就是标准格式,不要将业务代码写进去,如果成员变量的赋值确实需要一个复杂的逻辑,可以提取出一个方法,然后再构造器中调用,尽量保证构造器的代码简洁性。
- 构造器可以使用快捷键“alt+insert”生成,所生成为标准格式构造器,实际开发中建议使用快捷键自动生成。
- 同一个类中的多个构造器构成的是方法重载的关系,方法重载需要形参的数据类型不同,如果数据类型相同,仅仅是形参的名字不同,无法构成方法重载。
- 构造器和类加载的辨析:
类加载的主体是类,new对象会触发类加载,但是一个类的类加载只会进行一次。
构造器的的主体是对象,每一次new对象都会执行一次构造器。
构造器的互相调用
在构造器中,可以用this关键字去调用同类中的其他构造器,使用如下语法:this(实参列表);
根据实参列表的不同,去决定调用哪个构造器。比如:
this(); 表示调用同类中的无参构造器
this(int); 表示调用同类中的int构造器
要注意的是:
在一个构造器中,使用this表示调用其他构造器时,只能用一次,且必须写在构造器代码的第一行。