根据构造函数的定义,它们没有任何返回类型,但在创建对象时我们经常做A a = new A();负责创建对象a。
A a=new A();
任何人都可以帮助我理解这个问题,在创建Object时构造函数实际发生了什么。
答案 0 :(得分:8)
构造函数没有返回类型,正确。但是表达式 new A()
确实会产生一个结果:对新创建的对象的引用。
以下是new A()
:
A
A
构造函数,this
引用该新对象此过程在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>
,并且每个类都必须有机会初始化它创建的对象的一部分。所以按顺序:
Object()
被调用以初始化java.lang.Object
内容AbstractCollection()
被调用来初始化它的东西AbstractList()
AbstractSequentialList()
LinkedList()
Object
表达式的结果一个对象,但需要五个构造函数来初始化它。 : - )
答案 1 :(得分:0)
Constructors无需返回任何内容。它们只构造当前实例。这完全是他们的工作,是对象创造的一部分。
答案 2 :(得分:0)
A a =新A();
构造函数声明看起来像方法声明 --except 他们使用类的名称并且没有返回类型 - from the java constructor docs
要理解构造函数,理解它与方法的区别同样重要。
构造函数在生活中有一个目的:初始化新对象及其字段。而已。 new 关键字处理内存空间的创建。
答案 3 :(得分:0)
你不应该认为new A()
是对构造函数的调用,因为发生了更多的事情,而不仅仅是构造函数的运行。运行new A()
时的主要步骤是这些。
A
的对象。因此构造函数本身实际上并没有返回任何内容 - 在构造函数中包含return this;
或类似内容是错误的。
答案 4 :(得分:0)
构造函数中的return语句在逻辑上没有意义,因为构造函数的目的是执行初始化。该对象尚未创建,该对象的实际构造发生在JVM中。