众所周知,我们不必向Java构造函数添加任何返回类型。
class Sample{
.....
Sample(){
........
}
}
在目标C中,如果我们创建构造函数,则它将返回指向其类的指针。我认为这不是强制性的。
AClass *anObject = [[AClass alloc] init];//init is the constructor with return type a pointer to AClass
同样,构造函数是否转换为返回对其自身类的引用的方法?
像这样:
class Sample{
.....
Sample Sample(){
........
return this;
}
}
编译器是否向构造函数添加对同一类的引用的返回类型?构造函数发生了什么?有参考研究吗?
实际上,我希望答案是在字节码级别或JVM级别甚至更低的级别。
许多人回答了如何用Java定义构造函数。
在JVM级别,静态初始化程序和构造函数是返回void的方法。静态初始化程序是静态方法,但是构造函数使用this
并且不需要返回任何东西。这是因为调用方负责创建对象(而不是构造函数)
如果您尝试仅以字节码创建对象而不调用构造函数,则会收到VerifyError。但是,在oracle JVM上,您可以使用Unsafe.allocateInstance()创建对象而无需调用构造函数,
调用<cinit>
不带参数的静态初始化程序,并调用构造函数<init>
。两者都有一个无效的返回类型。
在大多数情况下,这对Java开发人员是隐藏的(除非他们正在生成字节码),但是只有您在堆栈跟踪中看到这些“方法”(尽管您看不到返回类型)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句