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

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

 

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

 

1:对象

 

 

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

构造函数只能被构造函数调用,由于对象只会初始化一次。io

 

做者:吾名崔大帅编译

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

来源:知乎构造函数

 

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

相关文章
相关标签/搜索