this和super为什么必须在构造方法第一行
2018-02-19 18:37
218 查看
看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()的调用在第一行实现【以此来创建对象】,防止异常。
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()的调用在第一行实现【以此来创建对象】,防止异常。
相关文章推荐
- 在构造器中为什么this或super必须放在第一行?
- 在构造器中为什么this或super必须放在第一行?
- 在构造器中为什么this或super必须放在第一行?
- 在构造器中为什么this或super必须放在第一行?
- 构造器中this 或者 super 为什么要放到第一行?
- 为什么java的构造方法中this()或者super()要放在第一行
- 为什么java的构造方法中this()或者super()要放在第一行
- 为什么java构造函数的构造器只能在第一行写this() 或者super() ?
- 为什么java构造函数的构造器只能在第一行写this() super()
- 为什么静态成员、静态方法中不能用this和super关键字
- 为什么静态成员、静态方法中不能用this和super关键字
- 为什么静态成员、静态方法(static)中不能用this和super关键字
- 为什么super()和this()调用语句不能同时在一个构造函数中出现的解释
- 为什么静态成员、静态方法中不能用this和super关键字
- 为什么静态成员、静态方法中不能用this和super关键字
- 为什么静态方法中不能用this和super关键字?
- 为什么静态成员、静态方法中不能用this和super关键字
- 静态方法为什么不能用this和super
- java中静态方法中为什么不能使用this、super和直接调用非静态方法
- 为什么super()和this()调用语句不能同时在一个构造函数中出现的解释