1 问题描述

在几个月的Java学习过程中,用到构造函数的时候其实是很多的。那么大家是否遇到过这个问题呢?

为什么对构造函数的调用语句必须写在第一行_编程

可能很多人都没有遇到过这个问题,因为一开始老师就强调过,如果不是因为老师突然问到这个问题,我可能会一直这样用但是不知道原因所在。

其实这个问题的解决方法很简单,只需要把代码this(“hello”);放到int a =10;之前就行了。

为什么对构造函数的调用语句必须写在第一行_编程_02

但是最重要的是要明白为什么必须要把这句代码放到调用函数的第一行。

2 问题分析

首先要解决上面的问题,就必须要明白这个函数其实是一个特殊的函数——构造函数,为什么说它特殊呢?它的特殊对解决这个问题有什么作用呢?还有this()构造方法在这里的作用是什么呢?下面我们就来好好的了解一下构造函数和this()构造方法,并来找到这个主要问题的答案。

3 解决方案

首先函数分为两大种,普通函数和构造函数,在构造函数里又分为下面两种:

1)无参构造:

为什么对构造函数的调用语句必须写在第一行_编程_03

2)有参构造:

为什么对构造函数的调用语句必须写在第一行_编程_04

而构造函数相对于普通函数来说又具有以下作用:

1)创建对象。任何一个对象创建时,都需要初始化才能使用,所以任何类想要创建实例对象就必须具有构造函数。

2)对象初始化。构造函数可以对对象进行初始化,并且是给与之格式相符合的对象初始化。

所以上文提到的构造方法是只存在于构造函数中的一种方法,顾名思义,构造方法就是类构造对象时调用的方法,主要用来实例化对象。如果我们的类里面有多个构造函数,分别给不同的变量赋值,就可能会产生重复代码,为了解决这些重复代码,就可以用this(变量)的方式,来调用另一个构造函数,来给变量赋值。

所以为了避免用户构建出两个对象这种问题的出现,Java在编译时对这种情况做了预防措施,即用户不能在同一个方法内调用多个this(),同时为了避免程序对对象本身进行操作时,对象本身还未进行初始化(也就找不到对应对象),所以对this()的调用只能在构造方法中的第一行实现,以此来最早实现对象的创建,防止异常。

至于为什么程序不能先调用位于后面的“this()”,我想可能是与java的递归思想有关。

4 总结

因为this()为构造方法,作用是在类中构建出一个对象。因此避免多次创建对象,同一个方法内只能调用一个this()构造方法。同时为了避免程序需要操作对象时但是对象还未构建成功,所以需要把对this()的调用放在第一行。

5 参考文献

百度百科

CSDN:《为什么java的构造方法中this()或者super()要放在第一行》@ 一个瘦子的梦想

更多精彩文章: