构造方法
1.介绍
构造方法,又名构造器,是在创建对象的时候,要使用的方法
2.构造方法的格式
如图,我们在测试类中仅是创建了对象stu,但当我们打印时,打印了“我是构造方法”,可见,构造方法的执行时机是在创建对象时执行
3.构造方法的作用
1.用于创建对象
2.结合执行时机:可以在创建对象的时候,给对象中的成员变量进行初始化
我们在构造方法里就将name和age赋值,这样创建对象的时候调用构造方法,name和age也就被初始化,直接打印即可
4.优化构造方法
如图
我们创建了另外一个对象,构造方法的执行时机是每创建一次对象,构造方法就会执行,所以stu2这里也执行了构造方法,但打印出来的东西和stu1一模一样
原因就是因为我们在构造方法里把name和age写死了,这样对我们是没有意义的,那该如何灵活的赋值呢?
.
答:在构造方法里使用形参 如图
如果我们这样写的话,右边的name给左边的name赋值,还是局部变量给局部变量赋值。但我们创建对象后,使用的变量都是成员变量(手机根据手机设计图进行设计),所以打印出的还是默认值,这样就毫无意义
解决方法:使用this关键字
5.技巧
我们不需要死记创建对象时,会使用构造方法。如图
创建对象的格式中,new是开辟堆内存空间,而new后面的看着是否有点眼熟?这不就像我们之前调用方法的时候直接写方法的名字吗
所以,创建对象格式的后半段,就是在调用构造方法
6.注意事项
1.定义了构造方法,默认的就会消失 如图
最开始的时候,stu2的格式是不会报错的,但当我们写了一个带形参的构造方法后,stu1没有问题,stu2报错了
这是因为在最初我们没有写构造方法,系统默认提供了一个构造方法给我们 如图
这时创建stu2,使用了没有形参的构造方法,这样就没有问题。但我们现在自己写了一个带形参的方法,系统默认的构造方法没了,这时stu2后半段就不能空着了,而是应该像stu1一样要写实参,这就是报错的原因。
那该如何优化呢?我们自己写一个不带形参的构造方法不就行了
2.构造方法也是方法,可以使用重载
如上图,两个构造方法,方法名一样,里面的形参不同,就是方法重载关系
3.构造方法不能手动调用,只能创建对象时进行调用