son*_*mas 16 java constructor jvm bytecode
我们知道我们不必向Java构造函数添加任何返回类型.
class Sample{
.....
Sample(){
........
}
}
Run Code Online (Sandbox Code Playgroud)
在Objective C中,如果我们创建一个构造函数,它会返回一个指向其类的指针.但我认为这不是强制性的.
AClass *anObject = [[AClass alloc] init];//init is the constructor with return type a pointer to AClass
Run Code Online (Sandbox Code Playgroud)
类似地,构造函数是否转换为返回对其自己的类的引用的方法?
像这样:
class Sample{
.....
Sample Sample(){
........
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
编译器是否向构造函数添加了对同一类的引用的返回类型?构造函数发生了什么?有没有参考研究这个?
实际上我希望答案是字节代码级别或JVM级别甚至更低.
Pet*_*rey 18
许多人已经回答了如何在Java中定义构造函数.
在JVM级别,静态初始化器和构造器是返回void的方法.静态初始化程序是静态方法,但构造函数使用this并且不需要返回任何内容.这是因为调用者负责创建对象(而不是构造函数)
如果您尝试仅在字节代码中创建对象而不调用构造函数,则会得到VerifyError.但是在oracle JVM上,你可以使用Unsafe.allocateInstance()来创建一个对象,而无需调用构造函数,
调用静态初始化程序<cinit>,它不接受任何参数,并调用构造函数<init>.两者都有一个void返回类型.
在大多数情况下,这对Java开发人员是隐藏的(除非他们生成字节代码),但是只有在堆栈跟踪中看到这些"方法"时才会看到(尽管您看不到返回类型)
| 归档时间: |
|
| 查看次数: |
41660 次 |
| 最近记录: |