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

luc*_*fer 3 java constructor object

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

A a=new A();
Run Code Online (Sandbox Code Playgroud)

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

T.J*_*der 8

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

以下是发生的事情new A():

  1. 创建一个对象
  2. 给出了类型 A
  3. A通过this引用该新对象来调用相关构造函数
  4. 初始化完成后,表达式完成
  5. 表达式的结果是对新对象的引用

Oracle Java站点上的本教程中描述了此过程.

在许多方面,调用构造函数初始化器会更准确:构造发生的原因是new运算符,而不是构造函数.

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

List<String> m = new LinkedList<String>();
Run Code Online (Sandbox Code Playgroud)

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

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