Java 如果构造函数没有';没有任何返回类型?

Java 如果构造函数没有';没有任何返回类型?,java,constructor,Java,Constructor,这似乎是一个相当令人困惑的问题。根据定义,我理解构造函数是一种特殊类型的方法,用于初始化对象状态和/或为实例变量赋值 还有人在Stack Overflow中提到构造函数返回类的对象(实例),而不是普通方法所做/返回的 尽管阅读了大量的教程和参考资料,我还是找不到一个具体的理由来说明构造函数如何能够在不存在return语句的情况下返回值 我很想了解整个过程的内部工作情况。构造函数不返回任何内容。构造函数只是初始化一个实例 A 生成对指定类的新实例的引用 在对类进行求值时显式创建一个新的类实例 实例

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

还有人在Stack Overflow中提到构造函数返回类的
对象(实例)
,而不是普通方法所做/返回的

尽管阅读了大量的教程和参考资料,我还是找不到一个具体的理由来说明构造函数如何能够在不存在return语句的情况下返回值


我很想了解整个过程的内部工作情况。

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

A

生成对指定类的新实例的引用

在对类进行求值时显式创建一个新的类实例 实例创建表达式(§15.9)导致类 实例化

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

就在对新创建的对象的引用作为 结果,将处理指示的构造函数以初始化新的 对象,请使用以下过程:

  • 为此构造函数调用将构造函数的参数分配给新创建的参数变量

  • 如果此构造函数以同一类中另一个构造函数的显式构造函数调用(§8.8.7.1)开始(使用此构造函数),则 评估构造函数调用的参数和过程 递归地使用同样的五个步骤。如果这个构造器 调用突然完成,然后此过程突然完成 出于同样的原因;否则,继续执行步骤5

  • 此构造函数不会以同一类中另一个构造函数的显式构造函数调用开始(使用此函数)。如果 此构造函数用于对象以外的类,则 构造函数将以显式或隐式调用 超类构造函数(使用super)。评估论点和结论 使用这些函数递归调用超类构造函数的过程 同样的五个步骤。如果构造函数调用突然完成, 然后,出于同样的原因,此过程突然完成。否则,, 继续执行步骤4

  • 执行该类的实例初始值设定项和实例变量初始值设定项,分配实例变量的值 在 它们在源代码中从左到右的文本显示顺序 为了班级。如果执行这些初始值设定项中的任何一个会导致 异常,则不再处理其他初始值设定项,并且 过程突然完成,但出现了相同的异常。否则,, 继续执行步骤5

  • 执行此构造函数主体的其余部分。如果该执行突然完成,则此过程对于 同样的原因。否则,此过程将正常完成


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

    A

    生成对指定类的新实例的引用

    在对类进行求值时显式创建一个新的类实例 实例创建表达式(§15.9)导致类 实例化

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

    就在对新创建的对象的引用作为 结果,将处理指示的构造函数以初始化新的 对象,请使用以下过程:

  • 为此构造函数调用将构造函数的参数分配给新创建的参数变量

  • 如果此构造函数以同一类中另一个构造函数的显式构造函数调用(§8.8.7.1)开始(使用此构造函数),则 评估构造函数调用的参数和过程 递归地使用同样的五个步骤。如果这个构造器 调用突然完成,然后此过程突然完成 出于同样的原因;否则,继续执行步骤5

  • 此构造函数不会以同一类中另一个构造函数的显式构造函数调用开始(使用此函数)。如果 此构造函数用于对象以外的类,则 构造函数将以显式或隐式调用 超类构造函数(使用super)。评估论点和结论 使用这些函数递归调用超类构造函数的过程 同样的五个步骤。如果构造函数调用突然完成, 然后,出于同样的原因,此过程突然完成。否则,, 继续执行步骤4

  • 执行该类的实例初始值设定项和实例变量初始值设定项,分配实例变量的值 在 它们在源代码中从左到右的文本显示顺序 为了班级。如果执行这些初始值设定项中的任何一个会导致 异常,则不再处理其他初始值设定项,并且 过程突然完成,但出现了相同的异常。否则,, 继续执行步骤5

  • 执行此构造函数主体的其余部分。如果该执行突然完成,则此过程对于 同样的原因。否则,此过程将正常完成


  • 它为JVM提供了“return”操作码:

    “return”返回调用方法:

    默认构造函数的代码:

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

    它为JVM提供了“return”操作码:

    “return”返回调用方法:

    默认构造函数的代码:

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

    Java构造函数不返回任何值
    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
    
    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