java中构造函数的返回类型是什么?

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开发人员是隐藏的(除非他们生成字节代码),但是只有在堆栈跟踪中看到这些"方法"时才会看到(尽管您看不到返回类型)