为什么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()的调用在第一行实现【以此来创建对象】,防止异常。

posted @ 2019-08-19 07:24  旧巷里的旧少年  阅读(2555)  评论(0编辑  收藏  举报