Java:构造函数不返回。但它确实或是吗?

时间:2012-09-23 08:48:29

标签: java

statement_1:每当定义类的构造函数时,跳过返回类型,即构造函数不返回任何内容。所以即使它不能被宣布无效。

statement_2:但遇到classname obj = new classname()时,JVM会创建一个对象,返回obj变量的引用。

这两种说法都是正确的。现在我想知道statement_2与statement_1的关系。

我的问题是如果构造函数没有返回任何内容,obj如何被初始化?意味着它确实返回了一些东西,然后它应该有返回类型的类。

class Myclass{
              Myclass Myclass(){
                                   //return something of Myclass type 
               }

}

然后Myclass obj = new Myclass()不应该更有意义。

对主题更加清淡

5 个答案:

答案 0 :(得分:5)

当您编写classname obj = new classname()时,new运算符会创建并返回该对象。构造函数用于初始化它(例如设置任何字段),因此不会返回任何内容。

您可以将其视为3个步骤

  1. new创建对象
  2. new调用刚刚创建的对象的构造函数
  3. new返回已创建的对象
  4. 您可以阅读有关object creation in the Java Tutorial的更多信息。

答案 1 :(得分:2)

这是一个规则。构造函数没有返回类型。当您致电new Foo()时,您正在使用new运算符,后跟构造函数调用。

构成表达式new运算符,并返回Foo类型的对象。

如果构造函数有返回类型,则可以编写

Foo something = Foo();

或只是(假设返回void

Foo();

但这两段代码都是非法的。构造函数调用必须始终new运算符开头。 new运算符创建一个类型为Foo的对象(例如,为存储分配空间),将此对象传递给构造函数以初始化它,最后返回初始化的实例给来电者。

您可能想知道为什么对象创建语法如此接近普通方法调用。我想这是允许将参数传递给构造函数。他们可以制作一个特殊的语法,如

Foo foo = new Foo

请注意缺少的括号,因此这与方法调用不同。但是,如何将参数传递给构造函数?也许只是列出它们

Foo foo = new Foo "Hello", "World"

但是这个语法与在单个语句中初始化两个或多个变量的语法相冲突,即

Number a = new Integer(12), b = new Float(1.2);

所以他们最终选择了这种语法。

答案 2 :(得分:0)

这里构造函数没有返回任何东西,这个语句只返回分配了obj对象的内存地址。 &安培;这是新运营商的工作,这就是为什么我们需要新的运营商

答案 3 :(得分:0)

构造函数不返回任何内容。构造函数用于初始化实例变量。当你说

    Foo f = new Foo();

new 运算符会创建一个Foo对象。

答案 4 :(得分:0)

即使在字节码级别,构造函数也不会返回任何内容。它与返回void的方法具有相同的返回类型,而是将对象作为this的参数进行初始化。

注意:没有选项可以返回不同的对象,这就是为什么需要工厂方法。