调用构造函数是否一定会产生对象?

2018-10-11 20:21:50 +08:00
 BingMG

关于父类构造方法被调用时没有创建对象是认同的,可是父类构造方法被调用说明肯定有子类在创建对象不是吗?

所以不就是 → 构造函数调用一定会产生对象吗?

1548 次点击
所在节点    问与答
5 条回复
wsxyeah
2018-10-11 21:17:09 +08:00
啥语言
BingMG
2018-10-12 00:36:45 +08:00
@wsxyeah Java
geelaw
2018-10-12 00:46:36 +08:00
对于 Java 来说,对象的身份是不会变化的,也就是调用 superclass 的构造器的时候,this 就已经是 the most derived class object 了。

调用构造器的时候,已经产生了对象了。
wsxyeah
2018-10-12 08:40:55 +08:00
JVM 上 new 一个对象包含 NEW 指令与 INVOKE_SPECIAL 指令调用,前者完成创建对象的操作,后者调用新创建出来对象的 <init> 方法(也就是用来初始化)。
当在子类的 constructor 里调用 super(xxx) 的时候只是调用了父类的 <init> 方法。
sbw
2018-10-12 08:54:35 +08:00
先申请空间,然后在这个空间上执行 ctor,如果申请空间失败直接 bad alloc。
构造函数被调用时,对象空间已经申请成功。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/496836

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX