head first ruby this和super为什么必须在构造方法第一行

电脑杂谈  发布时间:2018-02-19 22:55:35  来源:网络整理

headfirst有哪些_head first ruby_headfirst方法

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

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

1:

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

headfirst方法_headfirst有哪些_head first ruby

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

作者:吾名崔大帅

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

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

headfirst方法_head first ruby_headfirst有哪些

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


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-85620-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...