首页资讯 • 正文

JAVA中的构造方法只能调用一次,为什么this#28#29;又可以调用另一个构造方法?

发布时间:

这是一个比较好的问题,在学习Java的过程中,通过对各种调用方式进行发问,从而能越来越深入的了解Java的运行机制。

要想解释为什么this()可以再次调用构造方法,我们首先需要看一下这种调用是如何产生的,要产生this()调用构造方法,需要先完成一个构造方法的重载,看一个例子:

通过这个例子,我们可以看到this()完成了对构造方法的多次调用,最终的结果是三个构造方法都执行了。

这里面有一点是需要被重点关注的,那就是this()调用一定是位于构造方法中的第一条可执行语句的位置,这是一个硬性规定。为什么有这个规定呢?下面我们沿着这个思路来探究一下,这些构造器在执行过程中都经历了哪些过程。

首先当调用CTest(int a)这个构造方法时,由于其中的this(a,b)调用从而开始调用CTest(int a,int b),同样由于this(a,b,0)从而调用第一个构造方法,也就是CTest(int a,int b,int c),这是一个非常好理解的流程。但是这个流程中有一个明显的问题,就是构造器被调用了3次,那么是不是会产生三个不同的对象呢?看一个例子:

通过这个例子,我们发现,虽然调用了3次构造器,但是只创建出了一个对象。Java的学习过程中一定要搞清楚一件事情,那就是构造方法的作用是初始化对象,而不是创建对象,创建对象的动作是new完成的!可以简单的说(不太严谨),调用了几次new就创建了几个对象,和调用多少次构造器没有必然的联系。

在Java语言中,能完成对构造方法调用的,除了this还有super,其实我们在构造对象的时候,构造方法中往往都会有一个super调用,它的作用是调用父类构造器,那么是不是super调用会导致再创建出一个父类对象呢?当然不是!看一个例子:

通过这个例子,更能说明构造器的作用是初始化。在调用期间涉及到静态绑定和动态绑定,动态绑定发生在创建父类属性期间,而子类在调用父类方法时是静态绑定。

我的主要研究方向是大数据和人工智能,也出版过Java书籍,目前我在头条会陆续写一些关于软件编程、大数据、人工智能等方面的文章,感兴趣的朋友可以关注我的头条号,相信一定会有所收获。

如果有编程方面的问题,也可以咨询我。

谢谢!

相关文章Related

相关文章Related

返回栏目>>

首页   |   网站地图

Copyright © 2002-2019 平板电脑网,美白祛斑,路由器,一汽马自达,安全软件 版权所有