#构造器的引入
理解构造器之前,首先我们需要知道Java中为什么要引入构造器,以及构造器的作用。构造器就是和类名相同但无返回类型的方法。用于当前或某一对象的实例化,并将当前或某一对象返回。要得到一个类的实例时,往往是要运行其构造函数的。 Java中引入构造器,确保每一个对象都得到初始化,Java在有能力操作对象之前,系统会自动调用相应的构造器,保证初始化的进行。
构造器是创建Java对象的重要途径,通过new关键字来调用构造器,构造器返回该类的对象,当调用构造器时,系统会为该对象分配内存空间,并为这个对象执行默认初始化,如果这个对象已经产生了,那么这些操作在构造器之前就已经都完成了。
所以说当系统开始构造器的执行体之前,系统已经创建了一个对象,只是这个对象还不能够被外界程序访问,只能在该构造器中通过this来引用。当构造器的执行体执行结束后,这个对象作为构造器的返回值被返回,通过赋值给另一个引用类型的遍历,从而让外部程序访问。
接下来,让我们学习定义和使用构造器来初始化对象。
#示例分析
查看下面的程序,其中建了一个"Rectangle"类。该类中还包含一个构造器(构造器也是一种特殊的方法),并携带了一个参数"width"。
![6083cd1f343562a3de3c4dd3ede4d433.png](https://i-blog.csdnimg.cn/blog_migrate/ec6782843d004ffe1dd2d9aadd3c47fd.jpeg)
现在在构造器中我们将参数"width"的值赋给当前类的"width"Field。
![9fb7f2e3395acb2562f6c597e5eb9413.png](https://i-blog.csdnimg.cn/blog_migrate/c6169262a585f4c381273cb58fbf16f8.jpeg)
关键字"this"指向当前类。最后我们输出"Rectangle"对象的"width"Field。想想会输出什么?
![bf5cd923719036fc014f4eeee2aa79b5.png](https://i-blog.csdnimg.cn/blog_migrate/4c9d4d3b5137dff0183ad39e8ef488b5.jpeg)
![58e0cc14c17248eb1d1e7b9e32c72f5a.png](https://i-blog.csdnimg.cn/blog_migrate/945475495fd9a654419a27844dc0a795.jpeg)
现在添加参数"height"值为"200",并以逗号分隔将值"200"传递给"Rectangle"对象然后通过构造函数的参数值初始化"height"字段在main方法打印"rect.height"。
![37442701c61b091d0f4848741c953046.png](https://i-blog.csdnimg.cn/blog_migrate/a9f119d2a8c15e704092c99529a88ae9.jpeg)
创建第二个"Rectangle"对象,宽度为"10",高度为"20",把它分配给变量"rect2",并打印width和height字段。
![e752992dd16591496594f64a2e40e6a6.png](https://i-blog.csdnimg.cn/blog_migrate/3c9014c02e8df0bf9c25e20eb63624a4.jpeg)
添加另一个不带参数的构造函数,初始化字段"height"和"width"的值为"100"创建一个"Rectangle"对象,将其分配给变量"rect3"并打印"width"和"height"字段。
![11f31228f0b7ca46ab5540704dd7d3fc.png](https://i-blog.csdnimg.cn/blog_migrate/8e9d7d99c506f258fd55fec514af242e.jpeg)
#构造器的命名规则中需注意的问题
(1):所取名字避免与类中某个成员变量的名字发生冲突。
(2):调用构造器是编译器的责任,所以必须让编译器知道调用的是哪一个方法,所以Java采取了与类同名的方法命名构造器。
(3):一个类可以有多个构造器。一个类的构造器的名称必须与该类的名称一致。要退出构造,可以使用返回语句"return;"。
好了,本期到这里就结束了,有什么不懂或纠正的可以在下方评论区留言,小编也是初学者,需要大家的支持。大家记得点赞收藏分享关注哟!学习本是一个有始有终的事,只有坚持不懈的思考与积累,才能学有所成,学有所获。正所谓
![26ca19e7eaad6626cd39db78aa71588a.png](https://i-blog.csdnimg.cn/blog_migrate/8556c8a93456fec421e313c60752280c.jpeg)
![c9890d65ffe61757ac505fe9c97382dd.gif](https://i-blog.csdnimg.cn/blog_migrate/7e89dc32eb62ba68e65d5eb77944da9e.gif)
Java入门第十四课:如何定义”方法“