构造函数没有任何返回类型,但是如何创建对象?

时间:2015-08-23 10:57:36

标签: java object constructor

根据构造函数的定义,它们没有任何返回类型,但在创建对象时我们经常做A a = new A();负责创建对象a。

A a=new A();

任何人都可以帮助我理解这个问题,在创建Object时构造函数实际发生了什么。

5 个答案:

答案 0 :(得分:8)

构造函数没有返回类型,正确。但是表达式 new A() 确实会产生一个结果:对新创建的对象的引用。

以下是new A()

的情况
  1. 创建对象
  2. 它的类型为A
  3. 调用相关的A构造函数,this引用该新对象
  4. 初始化完成后,表达式完成
  5. 表达式的结果是对新对象的引用
  6. 此过程在Oracle Java站点上的this tutorial中进行了描述。

    在许多方面,调用构造函数初始值设定项会更准确:构造是因为new运算符而不是构造函数而发生的。

    当一个对象由多个构造函数处理时,构造函数实际上不进行构造的事实变得尤为明显,这是非常常见的。考虑:

    List<String> m = new LinkedList<String>();
    

    创建了一个对象(忽略列表可能需要初始化的任何字段),但是调用五个不同的构造函数来初始化该对象,因为{{1}子类LinkedList<E>哪个子类java.util.AbstractSequentialList<E>哪个子类java.util.AbstractList<E>哪个子类java.util.AbstractCollection<E>,并且每个类都必须有机会初始化它创建的对象的一部分。所以按顺序:

    一个对象,但需要五个构造函数来初始化它。 : - )

答案 1 :(得分:0)

Constructors无需返回任何内容。它们只构造当前实例。这完全是他们的工作,是对象创造的一部分。

答案 2 :(得分:0)

Creating objects

A a =新A();

  • 声明:以粗体设置的代码是将变量名称与对象类型相关联的所有变量声明。
  • 实例化: new 关键字是一个创建对象的Java运算符。
  • 初始化:新运算符后面是对构造函数的调用,初始化新对象
  

构造函数声明看起来像方法声明 --except   他们使用类的名称并且没有返回类型 - from the java constructor docs

要理解构造函数,理解它与方法的区别同样重要。

构造函数在生活中有一个目的:初始化新对象及其字段。而已。 new 关键字处理内存空间的创建。

答案 3 :(得分:0)

你不应该认为new A()是对构造函数的调用,因为发生了更多的事情,而不仅仅是构造函数的运行。运行new A()时的主要步骤是这些。

  1. 预留了一大块内存 - 足以存储类A的对象。
  2. 构造函数已运行。
  3. 返回对预留的内存块的引用。
  4. 因此构造函数本身实际上并没有返回任何内容 - 在构造函数中包含return this;或类似内容是错误的。

答案 4 :(得分:0)

构造函数中的return语句在逻辑上没有意义,因为构造函数的目的是执行初始化。该对象尚未创建,该对象的实际构造发生在JVM中。