为什么java的构造方法中this()或者super()要放在第一行

Posted jxldjsn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么java的构造方法中this()或者super()要放在第一行相关的知识,希望对你有一定的参考价值。

看Head First Java 256页 ,书中提到“this()只能用在构造函数中,且它必须是第一行语句!”,不明白原因,查资料发现知乎已经有相关问题,搬运过来做个记录。

 

https://www.zhihu.com/question/47012546/

 

1:

 

 

在构造函数中,如果你不指定构造器之间的调用关系,那么编译器会给你加上super();目的是在初始化当前对象时,先保证了父类对象先初始化。所以,你指定了构造函数间的调用,那么this()必须在第一行,以保证在执行任何动作前,对象已经完成了初始化。

构造函数只能被构造函数调用,因为对象只会初始化一次。

 

作者:吾名崔大帅

链接:https://www.zhihu.com/question/47012546/answer/104001846

来源:知乎

 

2:

解答这个问题,首先要明确一下构造方法和普通成员方法的区别。

 

类似this()和super()这样的方法被称为构造方法,顾名思义,他的作用就是在JVM堆中构建出一个指定类型的对象,如果你调用了两个这种形式的方法,岂不是代表着构建出了两个对象。

 

同理,为了避免构建出两个对象这种问题的出现,Java在编译时对这种情况做了强校验,用户不能再同一个方法内调用多次this()或super(),同时为了避免对对象本身进行操作时,对象本身还未构建成功(也就找不到对应对象),所以对this()或super()的调用只能在构造方法中的第一行实现,防止异常。

 

在普通的成员方法中,如果调用super()或者this(),你是想要重新创建一个对象吗?抱歉Java为了保证自身对象的合理性,不允许你做这样的操作。

 

 

作者:Kifile

链接:https://www.zhihu.com/question/47012546/answer/104002471

来源:知乎

 

总结:

this()和super()为构造方法,作用是在JVM堆中构建出一个对象。因此避免多次创建对象,同一个方法内只能调用一次this()或super()。同时为了避免操作对象时对象还未构建成功,需要this()和super()的调用在第一行实现【以此来创建对象】,防止异常。

以上是关于为什么java的构造方法中this()或者super()要放在第一行的主要内容,如果未能解决你的问题,请参考以下文章

在java中this和super的使用

大数据JAVA基础第十一天

java中 this的定义

java 对象的this使用 java方法中参数传递特性 方法的递归

JAVA中this和super用法

java笔记(this,super,override,instanceof,static)