如果构造函数没有任何返回类型,它将如何返回?

时间:2015-05-20 01:34:40

标签: java constructor

这似乎是一个非常令人困惑的问题。根据定义,我理解构造函数是一种特殊类型的方法,用于初始化对象的状态和/或为实例变量赋值。

Stack Overflow中也有人提到构造函数返回一个类的 object (instance) ,而不是普通方法返回的那个?

尽管经历了大量的教程和参考资料,但我无法找到一个具体的理由来说明构造函数如何在没有return语句的情况下返回值。

我很想知道整个过程的内部工作。

4 个答案:

答案 0 :(得分:3)

构造函数不返回任何内容。构造函数只是初始化一个实例。

A new instance creation expression

new SomeExample();

生成对指定类

的新实例的引用
  

在评估类时显式创建新的类实例   实例创建表达式(第15.9节)导致一个类   实例

并调用相应的构造函数来初始化创建的实例

  

在对新创建的对象的引用之前返回为   结果,处理指示的构造函数以初始化new   使用以下过程对象:

     
      
  1. 将构造函数的参数分配给此构造函数调用的新创建的参数变量。

  2.   
  3. 如果此构造函数以同一个类中的另一个构造函数的显式构造函数调用(第8.8.7.1节)开头(使用此),则   评估参数并处理构造函数调用   递归地使用这五个相同的步骤。如果那个构造函数   调用突然完成,然后此过程突然完成   出于同样的原因;否则,继续步骤5.

  4.   
  5. 此构造函数不以同一类中另一个构造函数的显式构造函数调用开头(使用此方法)。如果   这个构造函数用于Object以外的类,然后是这个   构造函数将以a的显式或隐式调用开始   超类构造函数(使用超级)。评估参数和   使用这些来递归地处理超类构造函数调用   同样的五个步骤。如果该构造函数调用突然完成,   然后由于同样的原因,这个程序突然完成。除此以外,   继续第4步。

  6.   
  7. 为此类执行实例初始值设定项和实例变量初始值设定项,并指定实例变量的值   初始化器到相应的实例变量中   从左到右的顺序,它们在源代码中以文本形式出现   为了上课。如果执行任何这些初始化程序导致   异常,然后没有处理进一步的初始化程序   程序突然完成同样的异常。除此以外,   继续第5步。

  8.   
  9. 执行此构造函数的其余部分。如果该执行突然完成,则此过程突然完成   同样的道理。否则,此过程正常完成。

  10.   

答案 1 :(得分:1)

它为JVM提供了'return'操作码:

'return'返回调用方法: http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings

默认构造函数的代码:

aload_0
invokespecial   #1; //Method java/lang/Object
return

答案 2 :(得分:1)

Java构造函数不返回任何内容。构造函数只是初始化特定类的对象的新实例。有时构造函数会有System.out.Println(" text"),这可能会让你认为它会返回一些东西,但你可以在任何没有返回类型的方法中使用该语句。

答案 3 :(得分:1)

字节码

Test1 t1 = new Test1();

如下所示

NEW test/Test1    //create an uninitized instance of Test1
DUP
NVOKESPECIAL test/Test1.<init> ()V  // call construcctor  
STORE 1        // save reference to created instance in local var

这是构造函数,void方法实际上具有特殊名称<init>

public <init>()V   //V means no return value, void
   L0
    LINENUMBER 3 L0
    ALOAD 0
    INVOKESPECIAL java/lang/Object.<init> ()V  // call super constructor
    RETURN